diff --git "a/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-19\344\272\213\345\212\241/.keep" "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-19\344\272\213\345\212\241/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-19\344\272\213\345\212\241/2022-9-19\347\254\224\350\256\260.md" "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-19\344\272\213\345\212\241/2022-9-19\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..3c69364a123d10a3f7642630998b7c4c803a40ee --- /dev/null +++ "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-19\344\272\213\345\212\241/2022-9-19\347\254\224\350\256\260.md" @@ -0,0 +1,49 @@ +## 事务 + + + +#### 什么是事务 + +**事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。** + +**事务中的所有 SQL 语句是一个整体,共同进退,不可分割,要么全部执行成功,要么全部执行失败。** + + + +#### 事务的属性(ACID) + +一般来说,事务具有四个标准属性,分别是原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability),简称 **ACID**。具体说明如下: + +##### 1) 原子性 + +一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 + +##### 2) 一致性 + +在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 + +##### 3) 隔离性 + +数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 死锁 操作系统 + +##### 4) 持久性 + +事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 + +### 事务的流程 + +1. ##### 开始事务:BEGIN TRANSACTION + + 事务开始后,直接执行代码,通常在修改表的代码行后会插入全局变量(@ERROR)进行错误代码的判断,一般会定义变量来装错误代码(@ERROR),在执行代码后,会用if进行判断 + + @ERROR是否为0,若为0则提交事务,反之回滚 + +2. ##### 提交事务:COMMIT TRANSACTION + + 当代码块无错误时,直接执行代码块 + +3. ##### 回滚事务:ROLLBACK TRANSACTION + + 当代码块有错误时,返回以上至begin之间已执行的代码。 + +4. ##### 存储点语句:SAVE TRANSACTION \ No newline at end of file