mysql错误1442触发器

mysql错误1442触发器,mysql,triggers,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; S

我有以下触发因素:

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
错误:

错误1442:1442:无法更新存储中的表“students” 函数/触发器,因为调用 此存储函数/触发器


是因为您实际上是在插入前触发器上执行插入操作吗

你不想让引发插入的事件来决定它吗

您将根据刚才插入到同一个表中的学生插入另一个学生


尝试在插入后用
重写,并更新刚创建的记录。

错误消息显示全部:触发器在students表上插入事件之前处理事件,并尝试从触发器将新记录插入students表。这将再次触发这个触发器,它将在同一个表中插入另一行。。。我可以继续吗

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

您不能更新调用触发器的表(学生):

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

这样做将生成错误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.

如果您只需要根据同一表格或其他表格中以前的条目设置字段值(使用
选择
)。您可以在插入学生前使用
触发器,这样您可以使用
NEW
操作符设置/更新/编辑字段值

您可以将一个before insert触发器命名为“after_insert_student”。您需要学习如何编写合理的代码。此外,错误语句没有意义,因为代码没有引用名为
news
的表。而且,代码本身也被破坏了。