MySQL INSERT和SELECT优先顺序

时间:2010-05-15 23:11:16

标签: mysql operator-precedence

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

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

然后这两个查询同时运行(假设它在同一个mili / micro秒):

INSERT into users (id) values (1)

SELECT COUNT(*) from users

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

2 个答案:

答案 0 :(得分:5)

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

如果它是MyISAM,那么一个声明或另一个声明会锁定表格,并且你可以做很少的事情来控制它,而不是locking tables你自己。

如果它是InnoDB,它是基于事务的。多版本化体系结构允许对表进行并发访问,SELECT将查看其事务开始时的行数。如果同时进行INSERT,则SELECT将看到0行。实际上,如果SELECT的事务尚未提交,您甚至可以在几秒钟后执行INSERT执行0行。

这两笔交易无法真正同时启动。交易保证有一些订单。

答案 1 :(得分:2)

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