MySQL устанавливает текущую дату в поле DATETIME на вставке
У меня есть поле 'created_date' DATETIME, которое я хотел бы заполнить текущей датой после вставки. Какой синтаксис я должен использовать для запуска для этого? Это то, что у меня есть, но это неверно.
CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
Ответы
Ответ 1
Лучше всего изменить этот столбец на метку времени. MySQL автоматически использует первую временную метку в строке как "последнее измененное" значение и обновляет ее для вас. Это настраивается, если вы просто хотите сохранить время создания.
См. doc http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
Ответ 2
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
SET NEW.created_date = NOW();
END;;
DELIMITER ;
Ответ 3
Так как MySQL 5.6.X вы можете сделать это:
ALTER TABLE `schema`.`users`
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
Таким образом, ваш столбец будет обновляться текущей меткой времени, когда новая строка будет вставлена или обновлена.
Если вы используете MySQL Workbench, вы можете просто поместить CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
в поле значения DEFAULT, например:
![введите описание изображения здесь]()
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
Ответ 4
Использование Now() - не очень хорошая идея. Он сохраняет только текущее время и дату. При обновлении данных он не будет обновлять текущую дату и время. Если вы хотите добавить время один раз, значение по умолчанию = Now() является лучшим вариантом. Если вы хотите использовать временную метку. и хотите обновить это значение, каждый раз, когда эта строка обновляется. Тогда триггер лучше всего использовать.
Эти два тотариала помогут реализовать триггер.