數據庫 事務

目錄

1.定義

2、事務的特性(ACID特性)

3、SQL對事務的支持

4.Sql中事務的定義


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,因爲即使不出故障,也很難保證對數據庫的每次改寫都寫到實際數據庫中。一旦出現故障,程序對數據庫的所有修改將全部被撤銷。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章