MYSQL触发器在同一个表中插入列值

时间:2016-06-03 11:13:51

标签: mysql triggers

我有一个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

当我插入记录时,我收到的错误是: "无法更新触发器中的表,因为它已被调用此触发器的语句使用

1 个答案:

答案 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正常工作。更好的解决方案,当多个会话一次插入数据库时​​有效。