-- 示例代码:MySQL 行锁和表锁的使用
-- 1. 表锁 (Table Lock)
-- 使用 LOCK TABLES 对整个表进行锁定,防止其他会话对表进行写操作。
LOCK TABLES orders WRITE;
-- 在这里执行一些需要独占表的操作
UPDATE orders SET status = 'shipped' WHERE order_id = 123;
-- 解锁表
UNLOCK TABLES;
-- 2. 行锁 (Row Lock)
-- 使用 SELECT ... FOR UPDATE 对特定行加锁,防止其他事务修改这些行。
START TRANSACTION;
-- 加锁并查询特定行
SELECT * FROM orders WHERE order_id = 123 FOR UPDATE;
-- 修改锁定的行
UPDATE orders SET status = 'shipped' WHERE order_id = 123;
-- 提交事务
COMMIT;
-- 3. 共享锁 (Shared Lock)
-- 使用 SELECT ... LOCK IN SHARE MODE 对特定行加共享锁,允许多个事务读取但不允许修改。
START TRANSACTION;
-- 加共享锁并查询特定行
SELECT * FROM orders WHERE order_id = 123 LOCK IN SHARE MODE;
-- 提交事务
COMMIT;
LOCK TABLES 和 UNLOCK TABLES):用于锁定整个表,防止其他会话对该表进行写操作。适用于需要对表进行批量更新或维护的情况。SELECT ... FOR UPDATE):用于锁定特定行,防止其他事务修改这些行。适用于并发场景下对特定记录进行更新。SELECT ... LOCK IN SHARE MODE):允许多个事务同时读取锁定的行,但不允许修改。适用于读多写少的场景。通过合理使用这些锁机制,可以有效避免数据竞争和一致性问题。
上一篇:mysql 查询数据库大小
下一篇:mysql计算保留两位小数
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站