MySQL 中的乐观锁:仔细观察
本机不支持乐观锁定,一种用于管理数据库中并发更新的技术由 MySQL 提供。不过,它可以通过数据库实践和应用程序代码的结合来实现。
乐观锁的工作原理
乐观锁背后的原则是假设数据不会并发更新期间发生冲突。通过在更新之前检查数据完整性,它可以检测冲突并允许采取适当的操作。
在没有事务的情况下,通过在 UPDATE 之前包含额外的 SELECT 语句来应用乐观锁定。此 SELECT 语句检索数据的当前状态,然后将其与尝试更新之前的状态进行比较。如果数据发生更改,则中止更新,从而保持数据完整性。
在 MySQL 中使用乐观锁
要在 MySQL 中实现乐观锁,可以执行以下步骤:在应用程序代码中执行:
示例
考虑以下示例:
<code class="sql">SELECT val1, val2 FROM theTable WHERE iD = @theId; -- Perform data calculations UPDATE theTable SET val1 = @newVal1, val2 = @newVal2 WHERE iD = @theId AND val1 = @oldVal1 AND val2 = @oldVal2; -- Check the number of affected rows IF @@ROWCOUNT = 1 -- Update successful ELSE -- Conflict detected END</code>
其他乐观锁定方法
除了 SELECT-UPDATE-CHECK 方法之外,乐观锁定还可以使用版本列来实现。每次更新数据时,该列都会递增,并且 UPDATE 语句在更新行之前会检查版本。如果版本不匹配,则中止更新。
注意事项
乐观锁定假设冲突很少见,并且检测冲突的成本低于使用悲观锁定锁定(例如,通过交易)。不过,它可能不太适合并发量较高且数据完整性至关重要的场景。
以上是如果没有本机支持,如何在 MySQL 中实现乐观锁?的详细内容。更多信息请关注PHP中文网其他相关文章!