2012-07-16 114 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索引,更新會鎖定它必須掃描的所有行),更新並釋放鎖定。如果您沒有進行明確的交易/自動提交,每個對賬單都在自己的交易中運行,但仍然是交易並執行了鎖定