【PostgreSQL】关于事务
首先
如果要使用数据库,了解事务是必不可少的。本次我们将总结事务的相关内容。
「交易」是指一种行为
-
- トランザクションは、データベース操作の処理単位。
-
- 複数の操作を一つのグループとして扱い、全てが成功するか、全てが失敗するかの「全て成功、または無し」の性質を持つ。
- データの整合性と安全性を保つ。
交易的特点
-
- ACID特性
原子性,即事务内的所有操作要么全部执行,要么全部不执行。
一致性,即事务在保持数据库一致性的状态下完成。
隔离性,即同时执行的多个事务不会相互干扰。
持久性,即事务完成后,其结果以能够抵御系统故障的形式持久化。
事务控制
通过BEGIN开始事务,通过COMMIT确认事务,通过ROLLBACK撤销事务。
可以通过设置隔离级别来控制事务之间的可见性和影响。
锁
为了维护数据的一致性,使用锁来控制对数据的并发访问。
根据锁的类型和级别,会有不同的行为。
关于事务隔离级别
决定交易在多大程度上与其他交易“隔离”的重要设置。
如果交易的隔离级别较低,则可能产生脏读、不可重复读和幻读等影响。
在PostgreSQL中,可以指定以下隔离级别。
-
- 读未提交
-
- 在这个级别下,可以查看其他事务尚未提交的更改(脏读取)。
-
- 然而,在PostgreSQL中,实际上该级别与“读已提交”相同。
读已提交(默认)
事务只能看到在自己开始时已经提交的数据。
当其他事务的更改被提交后,这些更改将变得可见。
这可能导致非重复读取(相同查询返回不同结果)的可能性。
可重复读取
事务可以看到自己开始时的数据快照。
这样,相同的查询在事务中总是返回相同的结果(防止非重复读取)。
但是,可能会发生幻像读取(其他事务新增或删除的行可见)。
串行化
最严格的隔离级别,事务完全隔离于其他事务。
不受其他事务的影响,一系列针对数据库的事务会像顺序执行一样。
也防止了幻像读取,但在该级别下可能导致性能下降和锁竞争增加的可能性。
总结
-
- トランザクションは、データベースの信頼性と整合性を保つために必要。
- PostgreSQLでは、これらの概念がしっかりと実装されており、安全かつ効率的なデータ操作を可能。