触发器-- 表插入数据时其他字段同步自增长字段
需求: 表 test 中中id列是自增长字段,在插入数据的同时,自动将发 f_id 列同步id列
实现触发器:
DROP TRIGGER `set_f_id`;
CREATE
DEFINER=`root`@`%`
TRIGGER `set_f_id` BEFORE INSERT ON `test `
FOR EACH ROW
BEGIN
SET new.f_id=(SELECT IF(ISNULL(id),1,id+1) FROM (SELECT MAX(id) AS id FROM test )tmp) ;
END;
遇到 问题1: MySQL触发器更新本表数据异常: Can't update table 'tbl' in stored function/trigger because it
原因: 如果你在触发器里面对刚刚插入的数据进行了 insert / update, 则出现这个问题。因为会造成循环的调用.
解决: 直接用“set”
问题2:异常: updating of NEW row is not allowed in after trigger
原因:after不能对new进行修改
解决:改为为 BEFORE 在插入前出发。
总结:
Before与After区别:
before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。
对于INSERT语句, 只有NEW是合法的;
对于DELETE语句,只有OLD才合法;
对于UPDATE语句,NEW、OLD可以同时使用。