Триггер для вставки / обновления текущей даты, запущенной в ошибку MySQL - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы создать триггер update/insert для текущей даты (чтобы сохранить метку времени, когда она была изменена последней).Итак, поскольку я прочитал, что вы не можете определить триггер update/insert, но для этого мне нужно определить два триггера, я начал с insert -триггера.

У меня есть следующий код:

drop table if exists test;
CREATE TABLE IF NOT EXISTS test (
    id int,
    mydate datetime not null default now(),
    ts datetime
);
DELIMITER $$
DROP TRIGGER IF EXISTS update_test_timestamp;
CREATE TRIGGER `update_test_timestamp` 
AFTER INSERT ON `test` 
FOR EACH ROW  
BEGIN  
    UPDATE `test` SET `ts` = CURRENT_TIMESTAMP WHERE `id` = NEW.id;
END $$
DELIMITER ;
INSERT INTO test (id) VALUES (1);

По сути, я хочу сохранить временную метку при создании и "lastupdate" -timestamp (ts).К сожалению, ошибка:

Код ошибки: 1442. Невозможно обновить таблицу 'test' в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию / триггер.

Что я сделал не так?Когда я пытаюсь изменить его на update -триггер (вместо insert), я получаю ту же проблему.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы не нуждаетесь в предложении UPDATE.Вы можете просто использовать

SET NEW. ts = CURRENT_TIMESTAMP();

В идеале, если вы хотите использовать автоматические отметки времени для каждого обновления, вы можете изменить свою таблицу следующим образом.

ALTER TABLE `test` 
CHANGE COLUMN `ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;

, который преобразует ваше поле ts в поле метки времени и сохраняет метку времени всякий раз, когда вы обновляете любое поле в вашей таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...