你不能用一个触发器来做到这一点。
但是,如果您将lastChanged
列从更改为DATETIME
,TIMESTAMP
则可以使用该DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
功能在任何插入或更新时自动设置值。
一个权衡是TIMESTAMP
数据类型只能支持从 1970 到 2038 的值,因此如果您需要存储该范围之外的值,则不能使用它。
由于您希望使其尽可能简单,并且您说所有表都已经有一个名为 的列lastChanged
,您可以考虑使用information_schema
来生成您需要的 alter table 语句,然后一次执行它们。
像这样的东西:
select concat('alter table ',
t.table_schema,
'.',
t.table_name,
' modify column ',
c.column_name,
' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;') as ddl
into outfile '/tmp/lastChanged.sql'
from information_schema.columns c
inner join information_schema.tables t
on t.table_schema = c.table_schema and t.table_name = c.table_name
where c.table_schema = database()
and c.data_type = 'datetime'
and c.column_name = 'lastChanged'
and t.table_type = 'base table';
\. /tmp/lastChanged.sql