乐观锁是并发控制中使用的一种做法,用于防止多个用户同时更新相同的数据。与悲观锁不同,悲观锁假设冲突会发生,并在事务开始时锁定数据,而乐观锁则假设冲突很少发生,并允许在不锁定的情况下进行更新。
MySQL 确实本身不实现乐观锁定。但是,它可以使用标准 SQL 指令和版本列方法来实现:
<code class="sql">CREATE TABLE theTable ( id INT NOT NULL AUTO_INCREMENT, val1 INT NOT NULL, val2 INT NOT NULL, version INT NOT NULL DEFAULT 0 );</code>
乐观锁定查询:
<code class="sql">UPDATE theTable SET val1 = @newVal1, val2 = @newVal2, version = version + 1 WHERE id = @id AND version = @oldVersion;</code>
检查冲突:
更新后,检查 AffectedRows 值:
事务隔离级别在乐观锁中发挥作用。在 READ_COMMITTED 隔离级别下,其他进程无法读取未提交的更新,从而防止发生冲突。
乐观锁适合更新不频繁、冲突概率较低的情况。它通常用于 Web 应用程序,其中较短的用户会话会降低并发更新的可能性。
以上是如何在 MySQL 中实现乐观锁?的详细内容。更多信息请关注PHP中文网其他相关文章!