Каков наилучший способ настроить поля последнего изменения и даты добавления записи?

#mysql

#mysql

Вопрос:

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

Я использую «ПРИ ОБНОВЛЕНИИ CURRENT_TIMESTAMP» и надеялся, что просто изменю UPDATE на INSERT.

Однако не повезло. Кто-нибудь может подсказать мне наилучший способ добиться этого? — предпочтительно внутри самой базы данных.

Ответ №1:

Это предполагает MySQL 5. Просто добавьте два триггера:

 create table foo (a1 INT, created timestamp, updated timestamp) engine=innodb;

DELIMITER |

CREATE TRIGGER foo_created BEFORE INSERT ON foo
FOR EACH ROW BEGIN
SET new.created := now();
SET new.updated := now();
END;

|

CREATE TRIGGER foo_updated BEFORE UPDATE ON foo
FOR EACH ROW BEGIN
SET new.updated := now();
END;
|

DELIMITER     ;

insert into foo (a1) values(7);
select * from foo;

update foo set a1=9;
  

Ответ №2:

В принципе, вам нужно, чтобы оба столбца были настроены как временные метки со значениями по умолчанию CURRENT_TIMESTAMP . К сожалению, это не разрешено в MySQL:

 Error Code: 1293
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
  

У вас не может быть двух столбцов временных меток, даже если вам нужно, чтобы в одном из них было только значение по умолчанию CURRENT_TIMESTAMP , а другое должно быть UPDATE CURRENT_TIMESTAMP , это все равно не разрешено.

Здесь лучше всего указать как so:

 CREATE TABLE `test` (
`addedDate` dateTime,
`lastModified` timestamp on update CURRENT_TIMESTAMP
)
  

К сожалению, вам придется установить ‘addedDate’ вручную при вставке с помощью NOW() функции.

Комментарии:

1. Спасибо — это то, что я подумал. Было бы неплохо не делать этого. В любом случае, спасибо за разъяснение.

Ответ №3:

В MySQL есть функция NOW (), которую вы можете использовать, смотрите Руководство в пункте «Учебные пособия», которое поможет вам внедрить ее.

Ответ №4:

Вы могли бы добавить столбец DATETIME и установить его при создании строки данных. Это будет служить датой добавления записи.

Затем добавьте столбец с ОТМЕТКОЙ ВРЕМЕНИ:

Автоматическое обновление первого столбца ВРЕМЕННОЙ МЕТКИ в таблице происходит при любом из следующих условий:

  • Вы явно присвоили столбцу значение NULL.

  • Столбец явно не указан в инструкции INSERT или LOAD DATA INFILE.

  • Столбец явно не указан в инструкции UPDATE, и какой-то другой столбец изменяет значение. ОБНОВЛЕНИЕ, которое присваивает столбцу значение, не приводит к обновлению столбца метки времени; если вы присвоите столбцу его текущее значение, MySQL проигнорирует обновление для повышения эффективности.

Столбец TIMESTAMP позаботится о дате изменения вашей записи.