【问题标题】:MySQL INSERT and SELECT Order of precedenceMySQL INSERT 和 SELECT 优先顺序
【发布时间】:2010-05-15 23:11:16
【问题描述】:

如果在一个 mysql 表上同时执行 INSERT 和 SELECT 哪个会先执行?

示例:假设“users”表的行数为 0。

然后这两个查询同时运行(假设它在相同的毫秒/微秒):

INSERT into users (id) values (1)

SELECT COUNT(*) from users

最后一个查询会返回 0 还是 1?

【问题讨论】:

    标签: mysql operator-precedence


    【解决方案1】:

    取决于您的 users 表是 MyISAM 还是 InnoDB。

    如果是 MyISAM,一条语句或另一条语句会锁定表,而您几乎无法控制它,除了 locking tables 自己。

    如果是 InnoDB,它是基于事务的。多版本架构允许并发访问表,SELECT 将在其事务开始的那一刻看到行数。如果同时有一个INSERTSELECT 将看到 0 行。事实上,如果INSERT 的事务尚未提交,您甚至可以在几秒钟后看到SELECT 执行的0 行。

    这两个事务不可能真正同时开始。交易保证有一定的顺序。

    【讨论】:

      【解决方案2】:

      这取决于哪个语句将首先执行。如果第一个,那么第二个将返回 1,如果第二个先执行,那么它将返回 0。即使您在具有多个物理内核的计算机上执行它们,并且由于锁定机制,它们永远不会以完全相同的方式执行时间戳。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 2011-08-30
        • 2017-04-21
        相关资源
        最近更新 更多