mysql错误1442触发器

时间:2015-10-21 19:23:34

标签: mysql triggers

我有以下触发器:

CREATE DEFINER=root@localhost TRIGGER after_insert_student AFTER INSERT ON 

students FOR EACH ROW BEGIN 

   SET @cateID := NEW.ID ;

   IF @cateID IS NOT NULL THEN

SELECT right(max(id), 3) INTO @firstid FROM students LIMIT 1;

         SET @IDFOR = @firstid+1;

SET @DATEID = DATE_FORMAT(NOW(),'%y%d%m');

INSERT INTO students (CONCAT(@DATEID, @IDFOR), DATENEW) 

         VALUES(@IDFOR, NOW() );

   END IF;

END

ERROR:

  

错误1442:1442:无法更新存储的“学生”表   函数/触发器,因为它已被调用的语句使用   这个存储的函数/触发器。

3 个答案:

答案 0 :(得分:1)

您无法更新调用触发器的表(学生):

  

在存储的函数或触发器中,不允许修改a   已经被使用(用于读或写)的表   调用函数或触发器的语句。

这样做会产生错误1442:

Error Code: 1442
Can't update table 'MyTable' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

如果您只需要根据同一个表或其他表中的先前条目设置字段值(使用SELECT)。您可以使用BEFORE INSERT ON students触发器,这样您就可以使用NEW运算符设置/更新/编辑字段值。

答案 1 :(得分:0)

是不是因为你实际上是在插入触发器之前进行插入?

您是否不会将插件留给发射它的事件?

您将根据刚刚插入同一张桌子的学生插入另一名学生

尝试使用AFTER INSERT ON重写,然后更新刚刚创建的记录。

答案 2 :(得分:0)

错误消息全部显示:您的触发器在学生表上插入事件之前处理,并且您尝试从触发器向学生表中插入新记录。哪个会再次引发这个非常触发,这会在同一个表中插入另一行......我还能继续吗?

将其更改为插入后触发器或使用NEW.fieldname = ...语法,您可以修改插入的值。