这个“比较和交换”语句是否始终是原子的,无论引擎如何(例如InnoDB或MyISAM)? :
UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1;
我问这个是因为我打算使用这个语句进行与事务和非事务数据库表兼容的伪行级锁定。
这是recommended for MyISAM的方法,但我不确定这是否适用于InnoDB,因为文档建议使用事务。
答案 0 :(得分:4)
是。 在InnoDB中,行将被锁定(使您在id上有唯一索引,更新锁定它必须扫描的所有行),更新并释放锁。如果您没有显式事务/自动提交已启用,则每个语句都在其自己的事务中运行,但它仍然是事务并且执行锁定