触发器-- 表插入数据时其他字段同步自增长字段

需求: 表 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可以同时使用。

posted @ 2017-12-27 08:46  何书涵  阅读(372)  评论(0编辑  收藏  举报