如果在mysql表上同时执行INSERT和SELECT,哪一个会先行?
示例:假设“users”表的行数为0。
然后这两个查询同时运行(假设它在同一个mili / micro秒):
INSERT into users (id) values (1)
和
SELECT COUNT(*) from users
最后一个查询是返回0还是1?
答案 0 :(得分:5)
取决于您的users
表格是MyISAM还是InnoDB。
如果它是MyISAM,那么一个声明或另一个声明会锁定表格,并且你可以做很少的事情来控制它,而不是locking tables你自己。
如果它是InnoDB,它是基于事务的。多版本化体系结构允许对表进行并发访问,SELECT
将查看其事务开始时的行数。如果同时进行INSERT
,则SELECT
将看到0行。实际上,如果SELECT
的事务尚未提交,您甚至可以在几秒钟后执行INSERT
执行0行。
这两笔交易无法真正同时启动。交易保证有一些订单。
答案 1 :(得分:2)
这取决于首先执行哪个语句。如果第一个然后第二个将返回1,如果第二个将首先执行,那么它将返回0.即使您在具有多个物理核心的计算机上执行它们,并且由于锁定机制,它们将永远不会在完全相同的情况下执行时间戳。