在数据库中,并发的操作进行读写数据,则会遇到脏读、不可重复读、幻读、串行化异常等问题。
数据库事务的特性:
- 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行;
- 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束;
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行;
- 持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。
数据库中存在4种事务隔离级别,读未提交、读已提交、可重复读和可序列化。
PostgreSQL在9.3版本后,已经支持了这四种标准的事务隔离级别。可以通过SET TRANSACTION命令设置当前事务的隔离级别(Transaction Isolation)。
隔离级别 | 脏读 | 不可重复读 | 幻读 | 串行化异常 |
读未提交 | 允许,但pg不支持 | 可能 | 可能 | 可能 |
读已提交 | 不可能 | 可能 | 可能 | 可能 |
可重复读 | 不可能 | 不可能 | 允许,但pg不支持 | 可能 |
可序列化 | 不可能 | 不可能 | 不可能 | 不可能 |
从上表中可以看到在PostgreSQL中,“读未提交”隔离级别,不允许脏读;“可重复读”隔离级别,不允许幻读。
原文地址:https://www.cnblogs.com/plairst/p/9378931.html
时间: 2024-11-05 13:45:03