我有一个mysql Innodb表' classrooms_subjects'如
id|classroom_id|subject_id
classroom_id& subject_id是复合键。每当我插入一行与classroom_id& subject_id,我的id字段插入为0。
现在我想创建一个触发器,它将输入id字段作为last_inserted_id()+ 1.
另外,我需要处理一次插入的多个记录。我的触发器如下:
CREATE TRIGGER `increment_id` AFTER INSERT ON `classrooms_subjects`
FOR EACH ROW BEGIN
UPDATE classrooms_subjects
SET classrooms_subjects.id = LAST_INSERT_ID() + 1 WHERE id=0;
END
当我插入记录时,我收到的错误是: "无法更新触发器中的表,因为它已被调用此触发器的语句使用
答案 0 :(得分:1)
一般信息:在触发器内使用更新语句是不正确的。
最好使用before insert触发器,并使用NEW.id
简单地指定列的值http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
以OLD命名的列是只读的。你可以参考它(如果你有的话) SELECT权限),但不能修改它。 您可以参考专栏 如果您具有SELECT权限,则以NEW命名。在BEFORE 触发器,您还可以使用SET NEW.col_name = value更改其值 如果你有UPDATE权限。这意味着你可以使用 触发器修改要插入新行或用于的值 更新一行。(这样的SET语句在AFTER中没有效果 触发因为行已经发生了变化。)
您可能应该构建表以使auto_increment正常工作。更好的解决方案,当多个会话一次插入数据库时有效。