SQL Server 表的管理_關於事務操作的詳解(案例程式碼)
1、概念
事務(transaction):
是將多個修改語句組合在一起的方法,這個方法中的所有語句只有全部執行才能正確完成功能。即要麼全部執行,要麼全部不執行。
2、事務的acid屬性:
- 原子性:事務處理語句是一個整體,不可分割。Atomicity–A
- 一致性:事務處理前後資料庫前後狀態要一致。Consistency–C
- 分割性(隔離性):多個事務併發處理互不干擾。Isolation–I
- 永續性:事務處理完成後,資料庫的變化將不會再改變。Durability–D
注意:在 MySQL 命令列的預設設定下,事務都是自動提交的,即執行 SQL 語句後就會馬上執行 COMMIT 操作。因此要顯式地開啟一個事務務須使用命令 BEGIN 或 START TRANSACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。
3、MySQL事務隔離級別
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
讀未提交(read-uncommitted) | 是 | 是 | 是 |
不可重複讀(read-committed) | 否 | 是 | 是 |
可重複讀(repeatable-read) | 否 | 否 | 是 |
序列化(serializable) | 否 | 否 | 否 |
4、SQL的事務模式
事務分類:
- 顯式事務:用begin transaction明確指定事務的開始。
- 隱性事務:開啟隱性事務:set implicit_transactions on,當以隱性事務模式操作時,SQL Servler將在提交或回滾事務後自動啟動新事務。無法描述事務的開始,只需要提交或回滾事務。
- 自動提交事務:SQL Server的預設模式,它將每條單獨的T-SQL語句視為一個事務。如果成功執行,則自動提交,否則回滾。
4.1顯示事務
T-SQL中管理事務的語句:
1 開始事務: begin transaction
2 提交事務:commit transaction
3 回滾事務: rollback transaction
案例程式碼:
begin transaction insert into dept values(100,`陳浩`,`男`,19) save transaction sp1; insert into dept values(101,`erer`,`男`,9) rollback transaction sp1; commit transaction; --執行過程中插入第二條語句後,事務回滾到第二條資料之前,也就是第二條動作被撤銷後, --最後提交事務後,表中只有一條資料。
4.2隱式事務
開啟關閉隱式事務的方法:
SET IMPLICIT_TRANSACTIONS ON/OFF;
set implicit_transactions on; insert into dept values(101,`erer`,`男`,9) rollbac