Mysql 设置上次修改和添加日期记录字段的最佳方法是什么?

Mysql 设置上次修改和添加日期记录字段的最佳方法是什么?,mysql,Mysql,嗨,我想设置并忘记两个字段,用于跟踪添加记录的日期,以及记录在mySQL数据库中最后一次修改的日期 我正在使用“更新当前时间戳”,希望我能将更新更改为插入 但是运气不好。有人能告诉我实现这一目标的最佳方法吗最好是在数据库本身内部。mySQL有一个NOW()函数,您可以使用,请参阅上的教程,它可以帮助您将其安装到位 您基本上需要将这两列设置为时间戳,默认值为CURRENT\u TIMESTAMP。不幸的是,MySQL中不允许这样做: Error Code: 1293 Incorrect table

嗨,我想设置并忘记两个字段,用于跟踪添加记录的日期,以及记录在mySQL数据库中最后一次修改的日期

我正在使用“更新当前时间戳”,希望我能将更新更改为插入


但是运气不好。有人能告诉我实现这一目标的最佳方法吗最好是在数据库本身内部。

mySQL有一个NOW()函数,您可以使用,请参阅上的教程,它可以帮助您将其安装到位

您基本上需要将这两列设置为时间戳,默认值为
CURRENT\u 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\u timestamp
,另一个是
UPDATE CURRENT\u timestamp
,这仍然是不允许的

您最好在此处指定以下内容:

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

不幸的是,您必须使用
NOW()
函数在插入时手动设置“addedate”。

您可以添加日期时间列,并在创建数据行时进行设置。这将作为记录添加的日期

接下来,添加一列:

在以下任一情况下,表中的第一个时间戳列会自动更新:

  • 您显式地将列设置为NULL

  • 在INSERT或LOAD DATA INFILE语句中未显式指定该列

  • UPDATE语句中未显式指定该列,其他一些列会更改值。将列设置为不会导致时间戳列更新的值的更新;如果将列设置为其当前值,MySQL将忽略更新以提高效率


时间戳列将处理您的记录修改日期。

这假定为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;

谢谢-我就是这么想的。不必这么做就好了。无论如何,谢谢你的澄清。