并发控制
作用
sequenceDiagram
    actor 用户1
    actor 用户2
    participant 数据库
    用户1->>数据库: 读取数据A
    用户2->>数据库: 修改数据A
    数据库-->>用户1: 可能读取到不一致数据
本质
协调多用户同时访问数据库的机制,保证数据一致性
并发问题
| 问题类型 | 说明 | 解决方案 | 
|---|---|---|
| 脏读 | 读取到未提交的数据 | 共享锁 | 
| 不可重复读 | 同一事务内多次读取结果不同 | 行级锁 | 
| 幻读 | 同一查询返回不同行数 | 范围锁 | 
示例
-- 悲观锁示例
BEGIN TRANSACTION;
  SELECT * FROM products 
  WHERE id = 1 FOR UPDATE; -- 加排他锁
  UPDATE products SET stock = stock - 1 
  WHERE id = 1;
COMMIT;
-- 乐观锁示例
UPDATE products 
SET stock = stock - 1, version = version + 1 
WHERE id = 1 AND version = 5; -- 检查版本号
注意事项
- 锁粒度选择:
 - 表锁:开销小,并发低
 - 行锁:开销大,并发高
 - 死锁检测和预防策略
 - MVCC(多版本并发控制)是常见解决方案
 - 根据业务场景选择合适的隔离级别