跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

并发控制

作用

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(多版本并发控制)是常见解决方案
  • 根据业务场景选择合适的隔离级别