如果在 mysql 表上同时执行 INSERT 和 SELECT 哪个会先执行?
示例:假设“users”表行数为 0。
然后这两个查询同时运行(假设它在相同的毫秒/微秒):
INSERT into users (id) values (1)
和
SELECT COUNT(*) from users
最后一个查询会返回 0 还是 1?
如果在 mysql 表上同时执行 INSERT 和 SELECT 哪个会先执行?
示例:假设“users”表行数为 0。
然后这两个查询同时运行(假设它在相同的毫秒/微秒):
INSERT into users (id) values (1)
和
SELECT COUNT(*) from users
最后一个查询会返回 0 还是 1?
取决于您的users
表是 MyISAM 还是 InnoDB。
如果是 MyISAM,一个语句或另一个语句会在表上锁定,除了自己锁定表之外,您几乎无法控制它。
如果是 InnoDB,它是基于事务的。多版本体系结构允许并发访问表,并且SELECT
将在其事务开始的那一刻看到行数。如果INSERT
同时发生,SELECT
将看到 0 行。事实上SELECT
,如果事务INSERT
尚未提交,您甚至可以在几秒钟后看到 a 执行的 0 行。
两个事务无法真正同时开始。交易保证有一定的顺序。
这取决于首先执行哪个语句。如果第一个,那么第二个将返回 1,如果第二个先执行,那么它将返回 0。即使您在具有多个物理内核的计算机上执行它们,并且由于锁定机制,它们永远不会以完全相同的方式执行时间戳。