1、事务特性ACID
- 原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性:事务完成时,必须使所有数据都保持一致状态。
- 隔离性:数据库系统提供的隔离机制,保证事务在不外部并发操作影响的独立环境下运行。
- 持久性:事务一旦提交或者回滚,它对数据库中的数据的改变就是永久的。
2、并发事务问题
- 脏读:一个事务读到了另一个事务还没提交的数据。
- 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同。
- 幻读:一个事务根据条件查询数据时,没有找到对应的数据行,但在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。
3、事务的隔离级别
- 读未提交 Read Uncommitted
- 读已提交 Read Committed
- 可重复读 Repeatable Read
- 可串行化 Seralzable
事务的隔离级别越高,数据越安全,但性能越低。
脏读 | 不可重复读 | 幻读 | |
---|---|---|---|
读未提交 | 允许 | 允许 | 允许 |
读已提交 | 禁止 | 允许 | 允许 |
可重复读(默认) | 禁止 | 禁止 | 允许 |
可串行化 | 禁止 | 禁止 | 禁止 |