MySQL InnoDB下并发插入时BEFORE INSERT触发器执行顺序咨询
MySQL InnoDB BEFORE INSERT触发器并发执行机制:串行还是并行?
结论
针对同一表的并发INSERT操作,对应的BEFORE INSERT触发器是串行执行的,你的测试结果完全符合InnoDB的运行机制。
具体解释
触发器是依附于INSERT语句所在的事务的,每个独立的INSERT请求都会触发一个事务(除非显式用事务包裹批量操作)。InnoDB为保证事务的隔离性和数据一致性,当多个事务并发操作同一表时,会通过行级锁(或必要时的表锁)控制访问顺序,导致事务串行执行。触发器作为事务的一部分,自然会跟着所属事务按顺序运行,不会并行执行。
你在触发器中加入
sleep()后,第一个事务的执行时长包含了sleep时间,第二个事务必须等第一个事务释放锁并完成后才能启动,所以总执行时长接近两个sleep时间的总和,这直观验证了串行执行的特性。补充:如果两条INSERT操作针对不同的表,且不存在任何锁冲突,对应的触发器可能会并行执行,但只要是同一表的并发写入,触发器必然是串行运行的。
内容的提问来源于stack exchange,提问作者Nitesh kumar Rai
相关产品推荐
相关产品推荐

