什么是事务
TRANSACTION(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。数据库事务通常包含了一个序列的对数据库的读/写操作。
为什么需要事务
事务存在的目的主要有两个
为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
事务的执行过程
当事务被提交给数据库管理系统(DBMS)后,DBMS 需要确保该事务中的所有操作都成功完成,并且其结果被永久保存在数据库中。如果事务中有操作没有成功完成,则事务中的所有操作都需要回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的环境中运行(互不干扰和影响)。
四大特性
事务具有以下四个标准属性,通常根据首字母缩写为 ACID
Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
特性的用途
特性 用途
原子性 并发控制,故障恢复
隔离性 并发控制
持久性 故障恢复
一致性 SQL的完整性约束(主键约束、外键约束)
常用的并发控制技术有基于锁的并发控制和基于时间戳的并发控制,GaussDB数据库针对DDL语句采用两阶段锁技术,而针对DML语句则采用多版本控制技术(Multi-Version Concurrency Control,MVCC)。GaussDB数据库的故障恢复采用WAL日志的方式来实现,目前主要支持Redo日志,通过Redo日志和MVCC可以保证事务读写的一致性。
语法讲解
BEGIN: 开始一个事务,事务开始后便会一直执行下去,直到遇到 COMMIT 或 ROLLBACK 命令,不过在数据库关闭或发生错误时,事务也会自动回滚(该命令是 BEGIN TRANSACTION 命令的简写)
BEGIN TRANSACTION: 开始一个事务(作用同 BEGIN 命令)
COMMIT: 把事务调用的更改保存到数据库中,即事务提交(也可以使用 END TRANSACTION 命令)
END TRANSACTION: 结束并提交事务
ROLLBACK: 事务回滚,用于撤销尚未提交或保存到数据库的事务命令




