时间:2022-11-08 10:30:01 | 来源:信息时代
时间:2022-11-08 10:30:01 来源:信息时代
SQL事务 : 一条或多条SQL语句的执行序列,该序列作为一个整体,在恢复时具有原子性,即事务中的所有语句或者全部成功执行,或者一条语句也不执行。
SQL事务的相关内容,是在SQL标准的SQL/基础部分中定义的。SQL标准中关于SQL事务的内容主要包括:
1. 事务管理
执行BEGIN TRANSACTION语句或调用引起事务初始化的SQL语句将初始化一个SQL事务,执行COMMIT语句或ROLLBACK语句将终止一个SQL事务。如果SQL事务是通过成功执行COMMIT语句而终止,则该SQL事务对SQL数据或模式所作的变更是持久的。如果SQL事务是通过ROLLBACK语句终止的,则该SQL事务对SQL数据或模式的所有变更均被撤销。
SQL标准中具体的事务管理语句如下:
(1) 开始事务语句:START TRANSACTION [隔离级|READ ONLY| READ WRITE]。READ ONLY表示该事务的访问方式为只读,READ WRITE表示该事务的访问方式为读写。
(2)提交语句:COMMIT[WORK]。提交语句有COMMIT和COMMIT WORK两种等价形式。
(3)回滚语句: ROLLBACK[WORK][保存点]。同样,回滚语句也有ROLLBACK和ROLLBACK WORK两种等价形式。保存点则用来实现SQL事务的部分回滚,具体将在下面介绍。
2. SQL事务的隔离级
SQL标准中把访问相同SQL数据或模式并且在时间上相互重叠的多个SQL事务称为并发SQL事务。SQL事务的隔离级是该SQL事务受并发SQL事务的影响及可能影响并发SQL事务的程度。SQL事务有四种不同的隔离级: READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。隔离级和并发SQL事务执行过程中可能发生的几种现象相关,这几种现象分别是:
(1) P1(“脏读”):SQL事务T1修改某一行,SQL事务T2在T1执行COMMIT之前读取该行。如果此时T1执行ROLLBACK,T2就会读取从未提交而被认为是从未存在的一行。
(2) P2(“不可重复读”): SQL事务T1读取某一行,SQL事务T2修改或删除该行,并执行COMMIT。如果T1此时试图重读该行,则它可能读到被修改后的值,或发现该行已被删除。
(3) P3(“幻象”): SQL事务T1读取满足某个搜索条件的行集,SQL事务T2执行满足T1所用搜索条件的SQL语句来产生一行或多行,如果SQL事务T1此时使用相同的搜索条件重复初始读操作,则会得到不同的行集。
四种隔离级可确保每个SQL事务要么执行完,要么根本不执行,且不丢失任何更新。相对于现象P1、P2和P3所采用的隔离级是不同的。表1指定对于给定的隔离级,某一现象是否可能发生。
表1 SQL事务隔离级与三种现象
级 | P1 | P2 | P3 |
READ UNCOMMITTED | 可能 | 可能 | 可能 |
READ COMMITTED | 不可能 | 可能 | 可能 |
REPEATABLE READ | 不可能 | 不可能 | 可能 |
SERIALIZABLE | 不可能 | 不可能 | 不可能 |