2

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

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

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

INSERT into users (id) values (1)

SELECT COUNT(*) from users

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

4

2 回答 2

5

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

如果是 MyISAM,一个语句或另一个语句会在表上锁定,除了自己锁定表之外,您几乎无法控制它。

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

两个事务无法真正同时开始。交易保证有一定的顺序。

于 2010-05-15T23:17:36.083 回答
2

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

于 2010-05-15T23:15:44.770 回答