目錄
1.定義
定義
一個數據庫操作序列
一個不可分割的工作單位(要麼全做,要麼全不做)
恢復和併發控制的基本單位事務和程序比較
在關係數據庫中,一個事務可以是一條或多條SQL語句,也可以包含一個或多個程序。
一個程序通常包含多個事務
2、事務的特性(ACID特性)
事務的ACID特性:
原子性(Atomicity)
一致性(Consistency)
隔離性(Isolation)
持續性(Durability )
3、SQL對事務的支持
ANSI(American National Standards Institute ,美國國家標準委員會)發佈的SQL92標準已經明確了對事務的支持。各個DBMS除了都支持表示事務結束的COMMIT和ROLLBACK語句外,各個不同的DBMS在其它具體的事務實現中還是有一些差異。
在最常用的數據庫系統SQL SERVER 2000中規定: 在事務中除以下語句不可使用外,其它所有SQL SERVER 2000支持的 SQL 語句均可使用:
因爲上表中的命令語句一旦執行,數據庫系統就立即自動做了提交,實際上我們可以認爲數據庫管理系統支持的所有的SQL語句均可以在事務中使用。
4.Sql中事務的定義
顯式定義方式
BEGIN TRANSACTION BEGIN TRANSACTION SQL 語句1 SQL 語句1 SQL 語句2 SQL 語句2 。。。。。 。。。。。 COMMIT ROLLBACK
隱式方式
當用戶沒有顯式地定義事務時,
DBMS按缺省規定自動劃分事務
例.下面是創建一個帶有參數的事務t11。功能是:首先,刪除學生表中學號爲'200102'的學生記錄。
並且如果參數X=-1,回滾事務;否則,刪除選修表中學號爲'200102'的選修記錄,並提交事務。
begin transaction t11 with mark 'aaa' declare @x int set @x=1 delete from student where sno='200102' if @x=-1 begin rollback transaction t11 end else begin delete from sc where sno='200102' commit transaction t11 end
執行過程:
exec fs; -- 觸發器那篇博客定義的觸發器 查詢表studnet 運行結果: 2000101 李勇 男 20 00311 0 2000102 劉詩晨 女 19 00311 0 begin transaction t11 with mark 'aaa' declare @x int set @x=1 delete from student where sno='2000102' if @x=-1 begin rollback transaction t11 end else begin delete from Cj where sno='2000102' commit transaction t11 end exec fs; 運行結果: 2000101 李勇 男 20 00311 0 -- 成功刪除'2000102' 因爲@x=1沒有rollback 反而commit begin transaction t11 with mark 'aaa' declare @x int set @x=-1 delete from student where sno='2000101' if @x=-1 begin rollback transaction t11 end else begin delete from Cj where sno='2000101' commit transaction t11 end --(1 行受影響) --但是 exec fs; 2000101 李勇 男 20 00311 0 -- 並未刪除 rollback了
在應用程序中儘量使用數據庫提交語句COMMIT,因爲即使不出故障,也很難保證對數據庫的每次改寫都寫到實際數據庫中。一旦出現故障,程序對數據庫的所有修改將全部被撤銷。