在数据库中,并发的操作进行读写数据,则会遇到脏读、不可重复读、幻读、串行化异常等问题。
数据库事务的特性:
- 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行;
- 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束;
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行;
- 持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。
数据库中存在4种事务隔离级别,读未提交、读已提交、可重复读和可序列化。
PostgreSQL事务隔离级别和对应数据库问题的关系
隔离级别 |
脏读 |
不可重复读 |
幻读 |
串行化异常 |
读未提交 |
允许,但pg不支持 |
可能 |
可能 |
可能 |
读已提交 |
不可能 |
可能 |
可能 |
可能 |
可重复读 |
不可能 |
不可能 |
允许,但pg不支持 |
可能 |
可序列化 |
不可能 |
不可能 |
不可能 |
不可能 |
从上表中可以看到在PostgreSQL中,“读未提交”隔离级别,不允许脏读;“可重复读”隔离级别,不允许幻读。
PostgreSQL学习(2)-- mvcc
原文:https://www.cnblogs.com/plairst/p/9378931.html