亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

讀書筆記 SQL 事務理解

2024-07-21 02:47:36
字體:
來源:轉載
供稿:網友
讀書筆記 SQL 事務理解事務的ACID屬性

Atomicity 原子性

每個事務作為原子單元工作(即不可以再拆分),也就是說所有數據庫變動事務,要么成功要么不成功。

SQL Server把每個DML或者 DDL命令都當做一個事務。不允許任何命令只是部分成功。 比如一個UPDATE語句更新500行,除非500行全部更新,否則有任何情況阻止該命令更新。SQL Server會終止該命令更新,并且回滾事務。

Consistency 一致性

每個事務,不論成功或失敗,數據庫中定義的約束狀態必須一致,否則會回滾。

比方說一個事務企圖插入一個無效的外鍵,這會被SQL Server檢測到違反約束,并且生成一個錯誤提示。

Isolation 隔離性

事務的執行看上去是互不干擾的,隔離的程度基于隔離級別設置。比方說,兩個事務要更改同一個數據,其中之一必須等另外一個完成以后才能去修改。

SQL Server用‘鎖’來達到事務的隔離的目的。 通常有兩種鎖 Shared locks 共享鎖 用作讀取數據 Exclusive locks 排它鎖 用作變更數據

Durability 持久性

事務操作結果都會被保存下來(事務日志 database transaction log)。每個數據庫變動(數據修改語句或者DDL語句)首先會把原始版本的數據(updates和deletes)寫到事務日志,當事務提交,并且所有一致性檢查都通過以后,事件成功提交的事實就會寫入事務日志。如果數據庫此之前意外當機,那么再次啟動后,數據會回滾。

阻塞 Blocking

如果兩個seesion在同樣的資源上申請排它鎖 ,當其中一個生成排它鎖以后,另外一個必須等第一個釋放后(commmit 或者 roll back)才能申請。也就是說同一時間內,兩個會話無法寫入同一個資源, 這樣,一個寫入阻塞了另外一個寫入。這就叫阻塞

除了同一資源申請排它鎖會造成堵塞之外,一個排他鎖也會阻止其他事務讀取同樣的資源。因為排它鎖和共享鎖是不相容的。

死鎖 Deadlocking

如果有兩個或多個session互相阻塞,這就會造成死鎖。當SQL Server 檢測到以后,會中斷其中一個,然后返回錯誤信息 1205.

Session 1Session 2

USE TSQL2012; BEGIN TRAN;

USE TSQL2012; BEGIN TRAN;

UPDATE HR.Employees SET Region = N'10004' WHERE empid = 1

UPDATE PRoduction.Suppliers SET Fax = N'555-1212' WHERE supplierid = 1

UPDATE Production.Suppliers SET Fax = N'555-1212' WHERE supplierid = 1

<blocked>

UPDATE HR.Employees SET phone = N'555-9999' WHERE empid = 1

<blocked>

發生死鎖以后其中一個事務會完成,而另外一個會被中斷,并且顯示1205錯誤信息

Msg 1205, Level 13, State 51, Line 1 Transaction (Process ID 61) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

最后可以把成功執行事務回滾

IF @@TRANCOUNT > 0 ROLLBACKIF @@TRANCOUNT > 0 ROLLBACK
@@TRANCOUNT

用來返回在當前連接上執行的 BEGIN TRANSACTION 語句的數目。

如果返回0則表示當前不在一個事務里面, 1表示在一個事務里面,大于1則表示在一個嵌套的事務里面。

image

注意一個事務只能包含一個ROLLBACK 命令,他會回滾整個事務,然后重置 @@TRANCOUNT 為0

image

實際例子如下

1. COMMIT TRAN

USE TSQL2012;SELECT @@TRANCOUNT; -- = 0BEGIN TRAN;    SELECT @@TRANCOUNT; -- = 1    BEGIN TRAN;        SELECT @@TRANCOUNT; -- = 2        -- Issue data modification or DDL commands here    COMMIT    SELECT @@TRANCOUNT; -- = 1COMMIT TRAN;SELECT @@TRANCOUNT; -- = 0

2. ROLLBACK TRAN

USE TSQL2012;SELECT @@TRANCOUNT; -- = 0BEGIN TRAN;    SELECT @@TRANCOUNT; -- = 1    BEGIN TRAN;        SELECT @@TRANCOUNT; -- = 2        -- Issue data modification or DDL command here    ROLLBACK; -- rolls back the entire transaction at this pointSELECT @@TRANCOUNT; -- = 0
事務隔離級別

READ COMMITTED

這個是默認隔離級別,只有數據更改被提交以后才能被讀取們所有SELECT語句會企圖取得一個共享鎖,修改數據的另外一個事務會話的排他鎖會阻塞READ COMMITTED 會話。

在查詢語句加入 WITH (NOLOCK) 或 WITH (READUNCOMMITTED)可以直接讀取

注意現在 WITH (NOLOCK) 不推薦使用,在新的SQL 版本中 Update和Delete 語句里面不允許用這個選項了。去而代之的是 WITH (READUNCOMMITTED)

SELECT lastname, firstnameFROM HR.Employees WITH (READUNCOMMITTED);

例子: 寫入阻塞寫入

Session 1Session 2

USE TSQL2012; BEGIN TRAN;

USE TSQL2012;

UPDATE HR.Employees SET postalcode = N'10004' WHERE empid = 1;

UPDATE HR.Employees SET phone = N'555-9999' WHERE empid = 1;

<more work><blocked>
COMMIT TRAN;
<results returned>

寫入阻塞讀取

Session 1Session 2

USE TSQL2012; BEGIN TRAN;

USE TSQL2012;

UPDATE HR.Employees SET postalcode = N'10005' WHERE empid = 1

SELECT lastname, firstname FROM HR.Employees

<blocked>

COMMIT TRAN;
<results returned>

READ UNCOMMMITED

這個隔離級別允許reader讀取未提交的數據,這個設定使得SELECT 語句不用申請共享鎖,不會被writer阻塞。然而被讀取的數據在隨后可能會回滾到原來的狀態,這回導致臟讀(reading dirty data)

例子

Session 1Session 2

USE TSQL2012; BEGIN TRAN;

USE TSQL2012; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

UPDATE HR.Employees SET region = N'1004' WHERE empid = 1;

SELECT lastname, firstname, region FROM HR.Employees

<results returned: region = 1004 for empid = 1>
ROLLBACK TRAN;

<region for empid = 1 rolled back to original value>

SELECT lastname, firstname, region FROM HR.Employees;

<results returned: region = original value for empid = 1>

READ COMMITTED SNAPSHOT 這個實際上不是一個新的隔離級別,這是 READ COMMITTED的一個選項,該隔離級別有以下特性:

●使用tempdb來存儲被修改數據的原始版本。 這樣當reader 讀取數據的時候讀取的是原始版本 ,不需要共享鎖,也不會被writer阻塞。 即讀取 (原始)提交數據。

●READ COMMITTED SNAPSHOT 選項可以針對每個數據庫設置

●RCSI(READ COMMITTED SNAPSHOT ) 不是獨立的隔離級別,與READ COMMITTED的區別僅僅是防止writer阻塞reader。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美亚洲范冰冰与中字| 4p变态网欧美系列| 日韩国产精品亚洲а∨天堂免| 国模精品一区二区三区色天香| 日韩大陆欧美高清视频区| 日韩中文娱乐网| 日韩精品视频免费专区在线播放| 91视频免费在线| 久久久久久久国产| 欧美日韩精品在线观看| 日韩欧美一区二区在线| 久久影视三级福利片| 日韩成人av在线播放| 国产一区二区三区网站| 国产性猛交xxxx免费看久久| 精品国产欧美一区二区五十路| 欧美在线观看www| 永久免费毛片在线播放不卡| 在线精品视频视频中文字幕| 国产精品免费久久久久久| 久久精品成人一区二区三区| 国产精品自产拍在线观| 久久97精品久久久久久久不卡| 亚洲aⅴ男人的天堂在线观看| 亚洲精品91美女久久久久久久| 91精品久久久久久久久中文字幕| 奇门遁甲1982国语版免费观看高清| 日韩美女在线观看| 国产精品网站视频| 欧美精品在线观看| 韩国精品久久久999| 18一19gay欧美视频网站| 成人激情春色网| 亚洲国产成人91精品| 色综合伊人色综合网| 国产精品入口日韩视频大尺度| 国产精品夜色7777狼人| 欧美日韩午夜剧场| 亚洲美女免费精品视频在线观看| 国语自产精品视频在线看抢先版图片| 81精品国产乱码久久久久久| 日韩中文有码在线视频| 成人国产精品一区| 亚洲美女免费精品视频在线观看| 亚洲色图35p| 午夜精品久久久久久久99热| 亚洲欧美制服综合另类| 最近2019中文字幕在线高清| 91超碰caoporn97人人| 亚洲人线精品午夜| 亚洲欧美国产日韩中文字幕| 久久在线观看视频| 国产一区二区丝袜| 日韩成人在线视频网站| 97国产一区二区精品久久呦| 国产精品日韩在线一区| 精品久久中文字幕久久av| 尤物九九久久国产精品的分类| 国产剧情久久久久久| 久久精品国产欧美亚洲人人爽| 久久久国产一区二区三区| 久久精品中文字幕免费mv| 日韩在线视频网| 亚洲欧美中文另类| 欧美日韩中文字幕日韩欧美| 欧美巨大黑人极品精男| 国产精品海角社区在线观看| 国产激情久久久久| 精品国产31久久久久久| 日韩美女在线看| 亚洲欧美日韩中文在线制服| 欧美日韩亚洲视频一区| 中文字幕日韩有码| 45www国产精品网站| 成人国内精品久久久久一区| 一区二区欧美久久| 美日韩精品免费观看视频| 欧美激情视频一区二区三区不卡| 日韩高清电影免费观看完整版| 91在线视频九色| 亚洲欧洲高清在线| 岛国av在线不卡| 精品国产依人香蕉在线精品| 中文字幕欧美日韩va免费视频| 亚洲国产欧美一区二区三区久久| 日韩中文字幕视频| 国产精品旅馆在线| 精品二区三区线观看| 亚洲精品影视在线观看| 成人黄色影片在线| 久久精品电影一区二区| 亚洲精品色婷婷福利天堂| 欧美成人激情图片网| 88国产精品欧美一区二区三区| 中文字幕9999| 精品亚洲国产成av人片传媒| 亚洲天堂av综合网| 欧美亚洲在线播放| 精品国产精品三级精品av网址| 美女视频黄免费的亚洲男人天堂| 国产精品成人免费电影| 久久天天躁日日躁| 国产精品91免费在线| 久久天天躁夜夜躁狠狠躁2022| 国产精品视频一| 国产成人亚洲综合91精品| 国产日韩在线观看av| 国产精品大片wwwwww| 3344国产精品免费看| 国产精品自拍小视频| 欧洲成人午夜免费大片| 日韩在线精品视频| 成人a级免费视频| 日韩精品中文字| 日韩av毛片网| 国产成人中文字幕| 欧美交受高潮1| 欧美电影免费观看大全| 欧美日韩ab片| 美女视频久久黄| 日韩大片免费观看视频播放| 久久精品国产亚洲一区二区| 色噜噜亚洲精品中文字幕| 国产欧美日韩精品专区| 日本中文字幕久久看| 成人黄色大片在线免费观看| 91欧美精品午夜性色福利在线| 国产丝袜一区二区| 亚洲午夜未满十八勿入免费观看全集| 中国人与牲禽动交精品| 91国内精品久久| 国产精品激情av电影在线观看| 国产91色在线| 日韩视频免费在线| 亚洲欧美精品伊人久久| 中文字幕一区二区三区电影| 欧美在线视频一区| 欧美成人黑人xx视频免费观看| 亚洲无限乱码一二三四麻| 51视频国产精品一区二区| 亚洲国产成人在线视频| 午夜精品在线视频| 午夜精品在线观看| 欧美精品久久久久| 国产综合福利在线| 伊人久久男人天堂| 国产精品91久久久| 精品久久久久久中文字幕大豆网| 国产精品欧美日韩| 国产精品福利久久久| 欧美另类暴力丝袜| 成人a在线观看| 4p变态网欧美系列| 精品久久久久久电影| 亚洲白虎美女被爆操| 国产精品久久久久久久久借妻| 国产欧美日韩丝袜精品一区| 久久精视频免费在线久久完整在线看| 国产精品老女人视频| 一本色道久久综合亚洲精品小说| 欧美精品制服第一页| 亚洲欧美日韩久久久久久| 九九视频这里只有精品| 亚洲无亚洲人成网站77777|