Установить поле для автоматической вставки метки времени при обновлении? - PullRequest
6 голосов
/ 22 ноября 2010

У меня есть таблица с полем DEC с именем product_price, и я хотел добавить поле с именем price_updated_date. Есть ли способ настроить таблицу на автоматическую вставку текущей метки времени при каждом обновлении поля product_price?

Если нет, есть ли способ установить его для вставки текущей отметки времени в любое время, когда запись вообще обновляется?

Обновление:

Кажется, использование триггера - лучший вариант здесь. Я новичок в триггерах и у меня возникли проблемы с его созданием. Вот мой код:

CREATE TRIGGER price_update
AFTER UPDATE ON cart_product
FOR EACH ROW
IF(OLD.product_price != NEW.product_price)
THEN
UPDATE cart_product 
SET price_updated_date = CURDATE()
WHERE product_id = NEW.product_id

Это дает мне эту ошибку:

# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 8

Ответы [ 5 ]

14 голосов
/ 15 мая 2012

Почему бы не установить свойства для этого поля как:

DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;
10 голосов
/ 22 ноября 2010

да, создать триггер после обновления на вашей таблице

CREATE TRIGGER price_update AFTER UPDATE on _table_ FOR EACH ROW UPDATE _table_ SET price_updated_date = CURTIME() where id=NEW.id

3 голосов
/ 21 января 2011

Замечу, что вы используете MySQL

По умолчанию для поля отметки времени MySQL по умолчанию используется значение NOW () при вставке AND при обновлении

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

Я знаю, что это не зависит от того, какой столбец был обновлен в соответствии с вашими потребностями, но может быть полезно вам или кому-либо еще, просматривающему этот вопрос.

Это 5-секундная работа - просто добавьте метку времениполе и эй престо

2 голосов
/ 22 ноября 2010

Каждый раз, когда вы запускаете оператор обновления, убедитесь, что вы делаете что-то вроде этого:

UPDATE table SET `product_price` = 'whatever', price_updated_date = NOW()

Это всегда вставляет текущую дату / время при изменении строки.

0 голосов
/ 22 ноября 2010

Использовать триггер базы данных:

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

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