事务的四大特性
- 原子性:事务中的所有操作都是原子的,要么全部成功要么全部失败,不存在中间状态。
- 一致性:状态的变化必须一致,比如转账,a->b,a减少多少,b必须增加多少。
- 隔离性:事务之间是隔离的,不能互相影响,有多种隔离级别。
- 持久性:事务完成后是持久的,不会因为宕机故障导致数据问题。
不考虑隔离级别会引发的问题
- 脏读:事务A读取到了事务B还未提交的数据。
- 不可重复读:一个事务中两次一样的查询读取到不同的数据。
- 幻读:事务A更新一批数据状态变成2,更新期间插入新的数据状态依然为1,事务A结束后查询这批数据发现依然有状态为1的。
数据库的隔离级别
- 序列化:事务串行执行,效率最低,能防止脏读、不可重复读、幻读。
- 可重复读:同事务中可重复读,能防止脏读、不可重复读。
- 读提交:能防止脏读。
- 未提交读:啥都防止不了。
MySQL默认可重复读,Oracle默认读已提交