MySQL AFTER INSERT触发器总是直接在INSERT语句之后执行,还是有可能发生2个插入,然后发生2个触发器?
我在写这个触发器,也就是:
CREATE DEFINER=`p28004_bf4`@`localhost` TRIGGER `setId`
AFTER INSERT ON `playerkills`
FOR EACH ROW
BEGIN
INSERT INTO globals () VALUES();
UPDATE playerkills SET globalId = LAST_INSERT_ID() WHERE id = ROW.id;
END我担心如果insert语句以某种方式交织在一起会发生什么,globalId必须始终是一致的,就像跨多个表的全局唯一标识符一样。
全球表:
Player杀害表:
发布于 2013-11-23 16:02:56
最终,在这种情况下运行什么顺序并发命令并不重要。LAST_INSERT_ID函数足够聪明,不会为您提供由其他人的并发查询插入的ID。
作为一个相对简单的例子,我打开了两个mysql会话并创建了一个名为globals的表,其中包含一个自动增量主键,然后交替输入这些命令。
## Session 1 ## ## Session 2 ##
mysql> INSERT INTO globals () VALUES ();
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO globals () VALUES ();
Query OK, 1 row affected (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 2 |
+------------------+
1 row in set (0.00 sec)https://stackoverflow.com/questions/20164370
复制相似问题