#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 позаботится о дате изменения вашей записи.