Отметка времени для создания строки и последней модификации - PullRequest
7 голосов
/ 03 декабря 2011

Мне нужно отслеживать время, когда строка была вставлена ​​в базу данных, и время ее последнего изменения.

Я попытался создать два отдельных столбца и использовать CURRENT_TIMESTAMP:

create table def (
  id int, 
  creation timestamp 
    default CURRENT_TIMESTAMP, 
  modification timestamp 
    on update CURRENT_TIMESTAMP
);

Однако это привело к ошибке:

ОШИБКА 1293 (HY000): неверное определение таблицы; может быть только один столбец TIMESTAMP с CURRENT_TIMESTAMP в предложении DEFAULT или ON UPDATE

Каков наилучший способ сделать это?

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


Хотя я бы предпочел ответы на MySQL, также приветствуются решения для других СУБД!

Ответы [ 2 ]

5 голосов
/ 03 декабря 2011

Да, это слабое ограничение для MySQL.Если вы просматриваете приложение, вы можете добавить вызов time () для столбца созданного и позволить столбцу updated_at использовать CURRENT_TIMESTAMP.

$sql = "INSERT INTO my_table SET name = 'Mike', created_at = " . time();

Я бы решил сделать это для столбца созданного_так каквероятно, к нему не будут обращаться так часто, как к столбцу updated_at.

- Правка -

Еще лучше, используйте встроенную в MySQL функцию now().Таким образом, вам нужно заботиться только о часовом поясе сервера mysql, а не о часовых поясах сервера приложений и сервера mysql.

$sql = "INSERT INTO my_table SET name = 'Mike', created_at = NOW()";
2 голосов
/ 03 декабря 2011

Вы можете использовать триггер.Приложение также может установить значение, но если это так, оно будет перезаписано базой данных.

delimiter //
CREATE TRIGGER def_bef_update BEFORE UPDATE ON def FOR EACH ROW BEGIN
    SET NEW.modification = CURRENT_TIMESTAMP;
END//
delimiter ;

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

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