2012-07-16 76 views
6

无论引擎(如InnoDB或MyISAM)如何,“比较和交换”语句总是原子的? :InnoDB和MyISAM中的MySQL原子更新

UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1; 

我问这个,因为我打算用这个语句来完成的伪行级锁是与事务性和非事务性数据库表兼容。

这是recommended for MyISAM的方法,但我不确定这是否适用于InnoDB,因为文档建议使用事务代替。

+0

链接已损坏。因此,使用这种孤立的陈述并不清楚。 – 2017-01-09 18:02:39

回答

4

是的。 在InnoDB中,该行将被锁定(使您拥有唯一的id索引,更新会锁定它必须扫描的所有行),更新并释放锁定。如果您没有进行明确的交易/自动提交,每个对账单都在自己的交易中运行,但仍然是交易并执行了锁定