MySQL 更新后自动更新列

标签 mysql triggers sql-update

正如标题所说,我有一个表,其中有一列名为 last_update,类型为 DATE。我想制作一个 trigger ,每次我更新一行时将其设置为 CURDATE() (为此特定行设置)。我试过这个:

delimiter $$
CREATE TRIGGER before_customer_update before update on customer for each row
begin
update customer set last_update = CURDATE() where id = old.id;
end $$
delimiter ;

但是得到一个错误

can't update table in stored function/trigger because it is already used by statement

我该如何解决?

最佳答案

将列定义更改为

会更容易
last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

如果你真的想在触发器中执行(用NEW引用当前记录):

替换

update customer set last_update = CURDATE() where id = old.id;

set NEW.last_update = CURDATE();

关于MySQL 更新后自动更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43425755/

相关文章:

php - Preg_replace 用 PHP 和 MySQL,允许破折号和括号

mysql - 我们可以在 mysql 的单个表上有多个触发器吗

sql - 有条件地仅更新 SQL Server 中的一条记录

sql - 如何在 UPDATE 查询中的 SELECT 之前的 FROM 之后使用 CASE 语句

mysql - 为什么没有聚合的结尾 Group By 会减慢我的查询速度?

php - 我可以在准备好的语句中参数化表名吗?

mysql datetime更新到一列

Mysql - 递归平衡计算

ruby-on-rails - INSERT RETURNING 和分区 POSTGRESQL

MySQL 更新与插入和删除