Подтвердить что ты не робот

MySQL устанавливает текущую дату в поле DATETIME на вставке

У меня есть поле 'created_date' DATETIME, которое я хотел бы заполнить текущей датой после вставки. Какой синтаксис я должен использовать для запуска для этого? Это то, что у меня есть, но это неверно.

CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
4b9b3361

Ответ 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() является лучшим вариантом. Если вы хотите использовать временную метку. и хотите обновить это значение, каждый раз, когда эта строка обновляется. Тогда триггер лучше всего использовать.

Эти два тотариала помогут реализовать триггер.