Mysql ON UPDATE CURRENT_TIMESTAMP vs.在更新后将时间设置为now()的触发器

Mysql ON UPDATE CURRENT_TIMESTAMP vs.在更新后将时间设置为now()的触发器,mysql,database-trigger,Mysql,Database Trigger,在搜索其他内容时,我在测试数据库中发现了以下触发器: 开始 设置NEW.UpdatedAt=now(); 结束 我很困惑。。。这与将列定义更改为以下内容有什么不同吗 alter table TableName change UpdatedAt ON UPDATE CURRENT_TIMESTAMP; 我不想在触发器中实现它,这有什么好处吗?对于早期版本的MySQL,更新时的仅适用于数据类型时间戳的列。DATETIME或任何其他数据类型不支持该功能 对于TIMESTAMP列,使用两个TIMES

在搜索其他内容时,我在测试数据库中发现了以下触发器:

开始
设置NEW.UpdatedAt=now();
结束
我很困惑。。。这与将列定义更改为以下内容有什么不同吗

alter table TableName change UpdatedAt ON UPDATE CURRENT_TIMESTAMP;

我不想在触发器中实现它,这有什么好处吗?

对于早期版本的MySQL,更新时的
仅适用于数据类型
时间戳的列。
DATETIME
或任何其他数据类型不支持该功能

对于
TIMESTAMP
列,使用两个
TIMESTAMP
列定义表以自动设置可能有点棘手;插入行时将
NOW()
分配给一列,更新行时将
NOW()
分配给另一列


触发器可以绕过这些限制。

如果不查看表结构的其余部分,很难说。MySQL的旧版本(我认为是5.6之前的版本)不能同时支持行插入的当前时间戳和更新上次修改时间戳的单独列。这可能是一个解决办法。我个人更愿意在更新时使用
属性,而不是看不见的触发器。谢谢你的回复!一个后续问题:我们谈论的年龄是多少?我想我们运行5.6已经有一段时间了。从我所读到的,这个问题比那更古老。。。可能是开发人员的一个老习惯。我知道MySQL 5.1不支持DATETIME数据类型的自动更新,只支持时间戳。(我对5.5不太清楚)这种时间戳(现在是DATETIME)列的自动更新是MySQL特有的功能,在Oracle、SQL Server。。。因此,触发器的另一个可能的基本原理是开发人员熟悉其他DBMS中的模式,或者数据库设计是从其他DBMS移植的。