您好我想设置并忘记两个字段,用于跟踪添加记录的日期以及上次修改记录在mySQL数据库中的日期。
我正在使用“ON UPDATE CURRENT_TIMESTAMP”并希望我只是将UPDATE更改为INSERT。
但是没有运气。任何人都可以给我提供最好的方法来实现这一目标吗? - 最好在数据库内部。
答案 0 :(得分:11)
这假定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;
答案 1 :(得分:3)
您基本上需要将两列设置为时间戳,默认值为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
,但仍然不允许这样做。
这里最好的选择是指定如下:
CREATE TABLE `test` (
`addedDate` dateTime,
`lastModified` timestamp on update CURRENT_TIMESTAMP
)
不幸的是,您必须使用NOW()
函数手动设置'addedDate'。
答案 2 :(得分:0)
mySQL有一个你可以使用的NOW()函数,请参阅Tutorials Point中的教程,它可以帮助你实现它。
答案 3 :(得分:0)
您可以添加DATETIME列并在创建数据行时进行设置。这将作为记录添加的日期。
接下来,添加TIMESTAMP列:
在以下任何条件下自动更新表中的第一个TIMESTAMP列:
您明确将列设置为NULL。
未在INSERT或LOAD DATA INFILE语句中明确指定该列。
未在UPDATE语句中显式指定该列,而某些其他列更改值。一个UPDATE,它将列设置为不会导致TIMESTAMP列更新的值;如果将列设置为其当前值,则MySQL会忽略更新以提高效率。
TIMESTAMP列将处理您的记录修改日期。