首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入后的MySQL触发器

插入后的MySQL触发器
EN

Stack Overflow用户
提问于 2013-11-23 15:50:42
回答 1查看 737关注 0票数 0

MySQL AFTER INSERT触发器总是直接在INSERT语句之后执行,还是有可能发生2个插入,然后发生2个触发器?

我在写这个触发器,也就是:

代码语言:javascript
复制
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必须始终是一致的,就像跨多个表的全局唯一标识符一样。

全球表:

  • id (主键、输入、自动增量)

Player杀害表:

  • id (主键,int,自动增量)
  • globalId (Key,Int)
  • 等。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-23 16:02:56

最终,在这种情况下运行什么顺序并发命令并不重要。LAST_INSERT_ID函数足够聪明,不会为您提供由其他人的并发查询插入的ID

作为一个相对简单的例子,我打开了两个mysql会话并创建了一个名为globals的表,其中包含一个自动增量主键,然后交替输入这些命令。

代码语言:javascript
复制
    ## 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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20164370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档