MySQL INSERT和SELECT优先顺序

Car*_*bus 2 mysql operator-precedence

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

示例:假设"users"表的行数为0.

然后这两个查询同时运行(假设它处于相同的mili/micro秒):

INSERT into users (id) values (1)
Run Code Online (Sandbox Code Playgroud)

SELECT COUNT(*) from users
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*win 5

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

如果它是MyISAM,一个语句或另一个语句锁定表,并且你可以做很少的事情来控制它,而不是自己锁定表.

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

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