MySQL乐观锁经常在大厂被问到,阿里比如:MySQL乐观锁是面试什么?实现原理?…等,下面我就来详解MySQL乐观锁@mikechen
MySQL乐观锁
MySQL乐观锁,乐理顾名思义就是观锁很“乐观”,也就在更新数据时不加锁,什底而是层实通过“版本号”、或“时间戳”来检测数据是现原否被修改。
MySQL乐观锁实现原理
MySQL的阿里乐观锁通过版本号或时间戳机制实现,其核心原理:是面试在更新数据时检查数据是否被其他事务修改,从而避免并发冲突。乐理
图片
实现步骤,观锁如下:
第一:增加“版本号”。什底在数据库表,层实中添加一个版本号字段,现原通常命名为 version 。阿里
复制ALTER TABLE orders ADD COLUMN version INT DEFAULT 1;1.这个字段用于记录数据的版本信息,b2b信息网每当数据被更新时,版本号会自动递增。
第二:读取数据。获取当前数据的版本号,(如:version字段)、或时间戳。
复制读取数据 SELECT id, stock, version FROM product WHERE id = 1;1.2. 第三:提交更新。更新数据时,校验版本号,是否与读取时一致。
复制UPDATE table SET column1 = new_value, version = version + 1 WHERE id = target_id AND version = old_version;1.2.3.比如,通过版本号的方式,更新库存:
复制更新时校验版本号 UPDATE product SET stock = stock - 1, version = version + 1 WHERE id = 1 AND version = 1; -- 假设当前version=11.2.3.4.在更新数据时,检查 version 字段的值是否与预期一致,如果一致则更新数据并递增 version 值,否则更新失败。
图片
比如:成功(affected rows > 0),更新成功,云服务器业务继续执行。
失败(affected rows = 0),说明数据已被其他事务修改,需要重新读取数据并重试。
在读多写少的场景下,乐观锁不会像悲观锁那样在读操作时加锁,从而减少了锁的开销,这是MySQL乐观锁最大的优点。
适用于数据冲突较少的场景,避免锁带来的性能损耗。
但是,在大部分金融交易,要求数据强一致性的场景,则需要悲观锁。
免费信息发布网





