mysql并发造成的异常:
- 更新冲突:初始值不一致
- 脏读:读取但未提交的数据,如果该事务回滚,读取到的就是不合法的,
- 不可重复读:涉及到update(同一条数据),两次读取的不一致(行锁即可)
- 幻读:涉及到插入和删除(同一组数据),两次读取的不一致(需要表锁)。
mysql 事务
事务需要满足ACID
- A 原子性:
要么都更新要么都不更新 - C 一致性:
不能违背数据库的完整性规则(库存不能为负) - I 隔离性:
一次需要处理很多用户信息,但对于单个用户体验来说,貌似他就是唯一的一样,不受其余用户干扰五种隔离级别
原名 别名 备注 未授权读取 读取未提交 彼事务可读不可写 授权读取 读取提交 未提交的事务禁止访问 可重复读取 RR 序列化 串行化 事务只能串行,不可并行 快照度 - D 持久性:
失误动作需要有日志记录
查询/更改事物的隔离级别
- 查询隔离级别
5.6之前 select @@tx_isolation;
mysql8 select @@transaction_isolation; - 设置隔离级别
set global(session) transaction isolation level Read uncommitted | Read committed | Repeatable Read | Serializable;