У меня возникла проблема, поскольку я пытался создать два столбца TIMESTAMP в моей базе данных. Один называется created
и один называется updated
. Я полагал, что было бы легко установить значение по умолчанию как CURRENT_TIMESTAMP
, а затем ON UPDATE CURRENT_TIMESTAMP
для столбца updated
. Но по какой-то причине MySQL означает, что плохая идея... поэтому я искал способы сделать это, не задав один из них в запросе вставки.
Я нашел один способ, используя триггер в этом ответе, но я продолжаю получать ошибки. Мне просто удалось создать триггер, но теперь я получаю ошибки, когда пытаюсь вставить новые строки, утверждая, что
1442 - Невозможно обновить задачи таблицы в хранимой функции/триггере, поскольку она уже используется оператором, который вызывается этой хранимой функцией/триггером.
И я не понимаю, что это значит. Итак, я надеялся, что кто-то здесь может пролить свет на эту тему.
SQL, который я использовал для создания таблицы и триггера, выглядит следующим образом:
CREATE TABLE `tasks` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`created` DATETIME,
`updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`title` VARCHAR(255) NOT NULL,
`notes` TEXT,
`status_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
KEY `status_id` (`status_id`),
CONSTRAINT `fk_tasks_statuses` FOREIGN KEY (`status_id`) REFERENCES `statuses` (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER task_creation_timestamp AFTER INSERT ON tasks
FOR EACH ROW
UPDATE tasks SET created = updated WHERE id = NEW.id;
Что я здесь делаю неправильно?