事務()
在上面的例子中在發出了COMMIT語句之後只有UPDATE操作會提交到數據庫所有的DELETE操作都被回滾保存點first_delete將被清除該查詢所占用的所有資源也被釋放
在當前事務中保存點的名稱必須是唯一的如果使用相同的名稱聲明了一個新的保存點則之前的保存點將被銷毀
Microsoft SQL Server 在定義保存點的語法中添加了TRAN關鍵字它建立保存點的語法如下所示
SAVE TRAN[SACTION] <savepoint name>
要使前面的代碼能在Microsoft SQL Server中正常運行只需要將SAVEPOINT關鍵字替換為SAVE TRANSACTION關鍵字即可
涉及多個數據庫的事務稱為分布式事務分布式事務本身就非常復雜要求許多高級的技術和知識分布式事務涉及使用兩階段提交它允許在一個事務中使用多種混雜的數據源萬一網絡連接中斷分布式事務必須盡可能地減少數據丟失的風險分布式事務使用的是兩階段提交協議各個RDBMS對此的具體實現上存在一定的差異但通常都遵循相同的兩階段原則
事務的隔離級別
SQL標准定義了多種事務隔離級別隔離級別指的是事務在自己的作用域內查看外部世界(即被任何其他事務修改了的數據)的能力表列出了SQL標准定義的幾種隔離級別
表 SQL標准定義的事務隔離級別
Oracle g/g已經實現了種事務隔離級別SERIALIZABLEREAD COMMITTED和READ ONLY
DB 定義事務隔離級別的術語與SQL標准的術語存在一定的混淆SQL標准中定義的SERIALIZABLE隔離級別在DB 中名為REPEATABLEREAD(RR)這是DB 中最高的隔離級別DB 也支持使用SQL標准的關鍵字作為RR的同義詞SQL標准中的REPEATABLEREAD在DB 中是READSTABILITY(RS)另外DB 還引入了一個新的隔離級別
CURSORSTABILITY
最後一個隔離級別CURSORSTABILITY(CS)是IBM DB 中默認的事務隔離級別它類似於SQL標准中的READ COMMITTED隔離級別(實際上它確保一行數據保持不變)
UNCOMMITTEDREAD(UR)隔離級別與SQL標准中的定義相同不獲取任何鎖因此可能發生髒讀(髒讀指的是一個事務在讀取數據時另外一個事務正在修改這些數據因此可能產生不確定的結果)
Microsoft SQL Server 不但支持SQL標准定義的所有種隔離級別它還添加了一個SNAPSHOT隔離級別用於保證在事務期間讀取的數據與在事務一開始時的數據保持一致隔離級別是為整個會話設置的而不是為會話中的單個事務設置的
表列出了SQL標准中定義的種隔離級別以及在每一種隔離級別下的行為髒讀指的是讀取了還未提交到數據庫的數據不可重復讀指的是在事務訪問數據期間數據可能發生改變幻讀則與不可重復讀有關它描述了這樣一種情形對一個相同的數據集執行同樣的查詢每次返回的查詢結果不相同
表 SQL中的事務隔離級別
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16447.html