Skip to content

事务

对于一组相关操作,通常需要全部成功或者全部失败。这组相关操作称为事务

特性(ACID)

  • 原子性(Atomicity): 事务必须以一个整体单元的形式进行工作,对于其数据的修改,要么全部执行,要么全都不执行。如果只执行事务中多个操作的前半部分就出现错误,那么必须回滚所有操作,让数据在逻辑上回滚到原先的状态。
  • 一致性(Consistency): 在事务完成时,必须使所有的数据都保持在一致状态
  • 隔离性(Isolation): 事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务是不会查看中间状态的数据的。
  • 持久性(Durability): 事务完成之后,它对于系统的影响是永久性的。即使今后出现致命的系统故障(如机器重启、断电),数据也将一直保持。

savepoint(保存点)

在一个大的事务中,可以把操作过程分成几个部分,每一个部分执行成功可以建一个保存点,若后面的部分执行失败,则回滚到此保存点,不必回滚整个事务。

锁机制

PostgreSQL有2类锁:表级锁和行级锁

表级锁有shareexclusive两种
share锁相当于读锁,表中内容不能变化,可为多个事务加上此锁,只要任意一个用户不释放此读锁,其他用户就不能修改这个表
exclusive相当于写锁,这时别的进程既不能写也不能读这条数据
多版本功能新增的2个锁
access share: 表明加上这个锁,即使是正在修改数据的情况下也允许读数据
access exclusion: 意思是即使有多个版本的功能,也不允许访问数据
行级锁(row sharerow exclusive)和表级锁会产生冲突
share update exclusiveshare row exclusive