MySQL 触发器更新最后插入的行

Posted

技术标签:

【中文标题】MySQL 触发器更新最后插入的行【英文标题】:MySQL trigger update last inserted row 【发布时间】:2013-07-04 10:37:52 【问题描述】:

我有这张表(SystemEvents):

id       ipv4        ipnumber
 1       1.2.3.4      
 2       3.4.5.6

我需要一个 AFTER INSERT 触发器来更新此表的最后一行。

类似下面的东西

UPDATE SystemEvents 
SET ipnumber=INET_ATON(NEW.ipv4)
WHERE id=NEW.id

这是正确的吗?

虽然语法看起来不错,但我无法让它工作!

任何帮助将不胜感激。

谢谢!

【问题讨论】:

能否请您显示 AFTER INSERT 触发器 【参考方案1】:

使用BEFORE INSERT 有效

delimiter |
CREATE TRIGGER `some_name` BEFORE INSERT ON SystemEvents
FOR EACH ROW BEGIN
   SET NEW.ipnumber = INET_ATON(NEW.ipv4);
END
| 
delimiter ;

SQLFiddle demo

【讨论】:

我得到了这个:错误 1362:触发器后不允许更新新行 也不工作。一切都卡住了,没有插入新行 是的!使用插入前触发器而不是插入后是关键。谢谢!【参考方案2】:

试试这个:

UPDATE SystemEvents 
SET ipnumber=INET_ATON(NEW.ipv4)
WHERE id=(SELECT MAX(id) FROM SystemEvents WHERE id < NEW.id);

【讨论】:

以上是关于MySQL 触发器更新最后插入的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 触发器中复制插入、更新、删除的行

在插入触发器之后修改一列并更新 Oracle 中新插入的行值

MySQL触发器将日期插入具有唯一匹配ID的行

Mysql - 创建触发器以根据插入另一个表中的行插入新行

更新/插入/删除表中的行后触发的触发器有问题

是否有可能在同一个触发器运行中发生混合更新和插入?