事務(wù)定義:
事務(wù)是單個(gè)的工作單元。如果某一事務(wù)成功,則在該事務(wù)中進(jìn)行的所有數(shù)據(jù)更改均會(huì)提交,成為數(shù)據(jù)庫(kù)中的永久組成部分。如果事務(wù)遇到錯(cuò)誤且必須取消或回滾,則所有數(shù)據(jù)更改均被清除。
事務(wù)三種運(yùn)行模式:
自動(dòng)提交事務(wù)每條單獨(dú)的語(yǔ)句都是一個(gè)事務(wù)。顯式事務(wù)每個(gè)事務(wù)均以 BEGIN TRANSACTION 語(yǔ)句顯式開(kāi)始,以 COMMIT 或 ROLLBACK 語(yǔ)句顯式結(jié)束。隱性事務(wù)在前一個(gè)事務(wù)完成時(shí)新事務(wù)隱式啟動(dòng),但每個(gè)事務(wù)仍以 COMMIT 或 ROLLBACK 語(yǔ)句顯式完成。
事務(wù)操作的語(yǔ)法:
BEGIN TRANSACTION
BEGIN DISTRIBUTED TRANSACTION
COMMIT TRANSACTION
COMMIT WORK
ROLLBACK WORK
SAVE TRANSACTION
BEGIN TRANSACTION
BEGIN TRANSACTION
標(biāo)記一個(gè)顯式本地事務(wù)的起始點(diǎn)。
BEGIN TRANSACTION將 @@TRANCOUNT 加 1。
BEGIN TRANSACTION 代表一點(diǎn),由連接引用的數(shù)據(jù)在該點(diǎn)是邏輯和物理上都一致的。如果遇上錯(cuò)誤,在 BEGIN TRANSACTION 之后的所有數(shù)據(jù)改動(dòng)都能進(jìn)行回滾,以將數(shù)據(jù)返回到已知的一致?tīng)顟B(tài) 。每個(gè)事務(wù)繼續(xù)執(zhí)行直到它無(wú)誤地完成并且用 COMMIT TRANSACTION 對(duì)數(shù)據(jù)庫(kù)作永久的改動(dòng),或者遇上錯(cuò)誤并且用 ROLLBACK TRANSACTION 語(yǔ)句擦除所有改動(dòng)
語(yǔ)法
BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ]
例子:
BEGIN TRAN T1
UPDATE table1 ...
--nest transaction M2
BEGIN TRAN M2 WITH MARK
UPDATE table2 ...
SELECT * from table1
COMMIT TRAN M2
UPDATE table3 ...
COMMIT TRAN T1
BEGIN DISTRIBUTED TRANSACTION
指定一個(gè)由 Microsoft 分布式事務(wù)處理協(xié)調(diào)器 (MS DTC) 管理的 Transact-SQL 分布式事務(wù)的起始。
語(yǔ)法
BEGIN DISTRIBUTED TRAN [ SACTION ]
[ transaction_name | @tran_name_variable ]
參數(shù)
transaction_name
是用戶定義的事務(wù)名,用于跟蹤 MS DTC 實(shí)用工具中的分布式事務(wù)。 transaction_name 必須符合標(biāo)識(shí)符規(guī)則,但是僅使用頭 32 個(gè)字符
@tran_name_variable
是用戶定義的一個(gè)變量名,它含有一個(gè)事務(wù)名,該事務(wù)名用于跟蹤 MS DTC 實(shí)用工具中的分布式事務(wù)。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
注釋
執(zhí)行BEGIN DISTRIBUTED TRANSACTION 語(yǔ)句的服務(wù)器是事務(wù)創(chuàng)建人,并且控制事務(wù)的完成
當(dāng)連接發(fā)出后續(xù) COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 語(yǔ)句時(shí),
主控服務(wù)器請(qǐng)求 MS DTC 在所涉及的服務(wù)器間管理分布式事務(wù)的完成。
有兩個(gè)方法可將遠(yuǎn)程 SQL 服務(wù)器登記在一個(gè)分布式事務(wù)中:
分布式事務(wù)中已登記的連接執(zhí)行一個(gè)遠(yuǎn)程存儲(chǔ)過(guò)程調(diào)用,該調(diào)用引用一個(gè)遠(yuǎn)程服務(wù)器。
分布式事務(wù)中已登記的連接執(zhí)行一個(gè)分布式查詢,該查詢引用一個(gè)遠(yuǎn)程服務(wù)器。
示例
本例在本地和遠(yuǎn)程數(shù)據(jù)庫(kù)上更新作者的姓。本地和遠(yuǎn)程數(shù)據(jù)庫(kù)將同時(shí)提交或同時(shí)回滾本事務(wù)。
說(shuō)明
當(dāng)前的SQL Server 上必須安裝 MS DTC.
USE pubs
GO
BEGIN DISTRIBUTED TRANSACTION
UPDATE authors
SET au_lname = 'McDonald' WHERE au_id = '409-56-7008'
EXECUTE link_Server_T.pubs.dbo.changeauth_lname '409-56-7008','McDonald'
COMMIT TRAN
GONote:
如果需要連接遠(yuǎn)程DB,如果是linkServer 方式連接的話,一定要修該linkServer的 RPC 選項(xiàng)置為 True。
SET XACT_ABORT
指定當(dāng) Transact-SQL 語(yǔ)句產(chǎn)生運(yùn)行時(shí)錯(cuò)誤時(shí),Microsoft? SQL Server? 是否自動(dòng)回滾當(dāng)前事務(wù)。
( 可以比較簡(jiǎn)單的理解,如果中間有任何一句SQL 出錯(cuò),所有SQL全部回滾.特別適用于 Procedure 中間調(diào)用Procedure ,如果第一個(gè)Procedure Ok,被調(diào)用的Procedure 中間有錯(cuò)誤,如果SET XACT_ABORT=false,則出錯(cuò)的部分回滾,其他部分提交,當(dāng)然外部Procedure 也提交。).
---在分布式Trans中一定要注意設(shè)置下面參數(shù)(XACT_ABORT)
語(yǔ)法SET XACT_ABORT { ON | OFF }
注釋 當(dāng) SET XACT_ABORT 為 ON 時(shí),如果 Transact-SQL 語(yǔ)句產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,整個(gè)事務(wù)將終止并回滾。為 OFF 時(shí),只回滾產(chǎn)生錯(cuò)誤的Transact-SQL 語(yǔ)句,而事務(wù)將繼續(xù)進(jìn)行處理。編譯錯(cuò)誤(如語(yǔ)法錯(cuò)誤)不受 SET XACT_ABORT 的影響。
對(duì)于大多數(shù) OLE DB 提供程序(包括 SQL Server),隱性或顯式事務(wù)中的數(shù)據(jù)修改語(yǔ)句必須將 XACT_ABORT 設(shè)置為 ON。
SET XACT_ABORT 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。
示例 下例導(dǎo)致在含有其它 Transact-SQL 語(yǔ)句的事務(wù)中發(fā)生違反外鍵錯(cuò)誤。在第一個(gè)語(yǔ)句集中產(chǎn)生錯(cuò)誤,但其它語(yǔ)句均成功執(zhí)行且事務(wù)成功
提交。在第二個(gè)語(yǔ)句集中,SET XACT_ABORT 設(shè)置為 ON。這導(dǎo)致語(yǔ)句錯(cuò)誤使批處理終止,并使事務(wù)回滾。
CREATE TABLE t1 (a int PRIMARY KEY)
CREATE TABLE t2 (a int REFERENCES t1(a))
GO
INSERT INTO t1 VALUES (1)
INSERT INTO t1 VALUES (3)
INSERT INTO t1 VALUES (4)
INSERT INTO t1 VALUES (6)
GO
SET XACT_ABORT OFF
GO
BEGIN TRAN
INSERT INTO t2 VALUES (1)
INSERT INTO t2 VALUES (2) /* Foreign key error */
INSERT INTO t2 VALUES (3)
COMMIT TRAN
GO
SET XACT_ABORT ON
GO
BEGIN TRAN
INSERT INTO t2 VALUES (4)
INSERT INTO t2 VALUES (5) /* Foreign key error */
INSERT INTO t2 VALUES (6)
COMMIT TRAN
GO
SAVE TRANSACTION
在事務(wù)內(nèi)設(shè)置保存點(diǎn)。
語(yǔ)法 SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable }
參數(shù) savepoint_name
是指派給保存點(diǎn)的名稱。保存點(diǎn)名稱必須符合標(biāo)識(shí)符規(guī)則,但只使用前 32 個(gè)字符。
@savepoint_variable
是用戶定義的、含有有效保存點(diǎn)名稱的變量的名稱。
必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。 注釋
用戶可以在事務(wù)內(nèi)設(shè)置保存點(diǎn)或標(biāo)記。保存點(diǎn)定義如果有條件地取消事務(wù)的一部分,事 務(wù)可以返回的位置。如果將事務(wù)回滾到保存點(diǎn),則必須(如果需要,使用更多的 Transact-SQL 語(yǔ)句和 COMMIT TRANSACTION 語(yǔ)句)繼續(xù)完成事務(wù),或者必須(通過(guò)將事務(wù)回滾到其起始點(diǎn))完全取消事務(wù)。若要取消整個(gè)事務(wù),請(qǐng)使用 ROLLBACK TRANSACTION transaction_name 格式。這將撤消事務(wù)的所 有語(yǔ)句和過(guò)程。
Note:1: 在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動(dòng)或從本地事務(wù)升級(jí)而來(lái)的分布式事務(wù)中,不支持 SAVE TRANSACTION。
2:當(dāng)事務(wù)開(kāi)始時(shí),將一直控制事務(wù)中所使用的資源直到事務(wù)完成(也就是鎖定)。當(dāng)將事務(wù)的一部分回滾到保存點(diǎn)時(shí),將繼續(xù)控制資源直到事務(wù)完成(或者回滾全部事務(wù))。
例子:begin transaction
save transaction A
insert into demo values('BB','B term')
rollback TRANSACTION A
create table demo2(name varchar(10),age int)
insert into demo2(name,age) values('lis',1)
commit transaction
ROLLBACK TRANSACTION rollback transaction
將顯式事務(wù)或隱性事務(wù)回滾到事務(wù)的起點(diǎn)或事務(wù)內(nèi)的某個(gè)保存點(diǎn)。
語(yǔ)法
ROLLBACK [ TRAN [ SACTION ]
[ transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable ] ]
參數(shù)
transaction_name
是給 BEGIN TRANSACTION 上的事務(wù)指派的名稱。transaction_name 必須符合標(biāo)識(shí)符規(guī)則,但只使用事務(wù)名稱的前 32 個(gè)字符。嵌套
事務(wù)時(shí),transaction_name 必須是來(lái)自最遠(yuǎn)的 BEGIN TRANSACTION 語(yǔ)句的名稱。
@tran_name_variable
是用戶定義的、含有有效事務(wù)名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
savepoint_name
是來(lái)自 SAVE TRANSACTION 語(yǔ)句的 savepoint_name。savepoint_name 必須符合標(biāo)識(shí)符規(guī)則。當(dāng)條件回滾只影響事務(wù)的一部分時(shí)使 用 savepoint_name。
@savepoint_variable
是用戶定義的、含有有效保存點(diǎn)名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
注釋 ROLLBACK TRANSACTION 清除自事務(wù)的起點(diǎn)或到某個(gè)保存點(diǎn)所做的所有數(shù)據(jù)修改。ROLLBACK 還釋放由事務(wù)控制的資源。
不帶 savepoint_name 和 transaction_name 的 ROLLBACK TRANSACTION 回滾到事務(wù)的起點(diǎn)。嵌套事務(wù)時(shí),該語(yǔ)句將所有內(nèi)層事務(wù)回滾到 最遠(yuǎn)的 BEGIN TRANSACTION 語(yǔ)句。在這兩種情況下,ROLLBACK TRANSACTION 均將 @@TRANCOUNT 系統(tǒng)函數(shù)減為 0。ROLLBACK
TRANSACTION savepoint_name 不減少 @@TRANCOUNT。
Note:
ROLLBACK TRANSACTION 語(yǔ)句若指定 savepoint_name 則不釋放任何鎖。
在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動(dòng)或從本地事務(wù)升級(jí)而來(lái)的分布式事務(wù)中,ROLLBACK TRANSACTION 不能
引用savepoint_name。在執(zhí)行 COMMIT TRANSACTION 語(yǔ)句后不能回滾事務(wù)。
在事務(wù)內(nèi)允許有重復(fù)的保存點(diǎn)名稱,但 ROLLBACK TRANSACTION 若使用重復(fù)的保存點(diǎn)名稱,則只回滾到最近的使用該保存點(diǎn)名稱的SAVE TRANSACTION。
在存儲(chǔ)過(guò)程中,不帶 savepoint_name 和 transaction_name 的 ROLLBACK TRANSACTION 語(yǔ)句將所有語(yǔ)句回滾到最遠(yuǎn)的 BEGINTRANSACTION。在存儲(chǔ)過(guò)程中,ROLLBACK TRANSACTION 語(yǔ)句使 @@TRANCOUNT 在觸發(fā)器完成時(shí)的值不同于調(diào)用該存儲(chǔ)過(guò)程時(shí)的@@TRANCOUNT 值,并且生成一個(gè)信息。該信息不影響后面的處理。
如果在觸發(fā)器中發(fā)出 ROLLBACK TRANSACTION:將回滾對(duì)當(dāng)前事務(wù)中的那一點(diǎn)所做的所有數(shù)據(jù)修改,包括觸發(fā)器所做的修改。
觸發(fā)器繼續(xù)執(zhí)行 ROLLBACK 語(yǔ)句之后的所有其余語(yǔ)句。如果這些語(yǔ)句中的任意語(yǔ)句修改數(shù)據(jù),則不回滾這些修改。執(zhí)行其余的語(yǔ)句不會(huì)激發(fā)嵌套觸發(fā)器。在批處理中,不執(zhí)行所有位于激發(fā)觸發(fā)器的語(yǔ)句之后的語(yǔ)句。每次進(jìn)入觸發(fā)器,@@TRANCOUNT 就增加 1,即使在自動(dòng)提交模式下也是如此。(系統(tǒng)將觸發(fā)器視作隱性嵌套事務(wù)。)
在存儲(chǔ)過(guò)程中,ROLLBACK TRANSACTION 語(yǔ)句不影響調(diào)用該過(guò)程的批處理中的后續(xù)語(yǔ)句;
將執(zhí)行批處理中的后續(xù)語(yǔ)句。在觸發(fā)器中,ROLLBACK TRANSACTION 語(yǔ)句終止含有激發(fā)觸發(fā)器的語(yǔ)句的批處理;
不執(zhí)行批處理中的后續(xù)語(yǔ)句。
ROLLBACK TRANSACTION 語(yǔ)句不生成顯示給用戶的信息。如果在存儲(chǔ)過(guò)程或觸發(fā)器中需要警告,請(qǐng)使用 RAISERROR 或 PRINT 語(yǔ)句。RAISERROR 是用于指出錯(cuò)誤的首選語(yǔ)句。
ROLLBACK 對(duì)游標(biāo)的影響由下面三個(gè)規(guī)則定義:
當(dāng) CURSOR_CLOSE_ON_COMMIT 設(shè)置為 ON 時(shí),ROLLBACK 關(guān)閉但不釋放所有打開(kāi)的游標(biāo)。
當(dāng) CURSOR_CLOSE_ON_COMMIT 設(shè)置為 OFF 時(shí),ROLLBACK 不影響任何打開(kāi)的同步 STATIC 或 INSENSITIVE 游標(biāo)不影響已完全填充的異步 STATIC 游標(biāo)。將關(guān)閉但不釋放任何其它類型的打開(kāi)的游標(biāo)。
對(duì)于導(dǎo)致終止批處理并生成內(nèi)部回滾的錯(cuò)誤,將釋放在含有該錯(cuò)誤語(yǔ)句的批處理內(nèi)聲明的所有游標(biāo)。
不論游標(biāo)的類型或 CURSOR_CLOSE_ON_COMMIT 的設(shè)置,所有游標(biāo)均將被釋放,其中包括在該錯(cuò)誤批處理所調(diào)用的存儲(chǔ)過(guò)程內(nèi)聲明的游標(biāo)。在該錯(cuò)誤批處理之前的批處理內(nèi)聲明的游標(biāo)以規(guī)則 1 和 2 為準(zhǔn)。死鎖錯(cuò)誤就屬于這類錯(cuò)誤。在觸發(fā)器中發(fā)出的 ROLLBACK 語(yǔ)句也 自動(dòng)生成這類錯(cuò)誤。
權(quán)限
ROLLBACK TRANSACTION 權(quán)限默認(rèn)授予任何有效用戶。
例子:
begin transaction
save transaction A
insert into demo values('BB','B term')
rollback TRANSACTION A
-- select * into demo2 from demo1
create table demo2(name varchar(10),age int)
insert into demo2(name,age) values('lis',1)
rollback transaction
COMMIT TRANSACTION
標(biāo)志一個(gè)成功的隱性事務(wù)或用戶定義事務(wù)的結(jié)束。如果 @@TRANCOUNT 為 1,COMMIT
TRANSACTION 使得自從事務(wù)開(kāi)始以來(lái)所執(zhí)行的 所有數(shù)據(jù)修改成為數(shù)據(jù)庫(kù)的永久部分,釋放連接
占用的資源,并將 @@TRANCOUNT 減少到 0。如果@@TRANCOUNT 大于 1,則COMMIT
TRANSACTION 使 @@TRANCOUNT 按 1 遞減。
只有當(dāng)事務(wù)所引用的所有數(shù)據(jù)的邏輯都正確時(shí),發(fā)出 COMMIT TRANSACTION 命令。
COMMIT WORK
標(biāo)志事務(wù)的結(jié)束。
語(yǔ)法
COMMIT [ WORK ]
注釋
此語(yǔ)句的功能與 COMMIT TRANSACTION 相同,但 COMMIT TRANSACTION 接受用戶定義的事務(wù)
名稱。這個(gè)指定或沒(méi)有指定可選關(guān)鍵字WORK 的 COMMIT 語(yǔ)法與 SQL-92 兼容
例子:
begin transaction a
insert into demo values('BB','B term')
commit TRANSACTION A
隱性事務(wù)
當(dāng)連接以隱性事務(wù)模式進(jìn)行操作時(shí),SQL Server將在提交或回滾當(dāng)前事務(wù)后自動(dòng)啟動(dòng)新事務(wù)。無(wú)須描述事務(wù)的開(kāi)始,只需提交或
回滾每個(gè)事務(wù)。隱性事務(wù)模式生成連續(xù)的事務(wù)鏈。
在為連接將隱性事務(wù)模式設(shè)置為打開(kāi)之后,當(dāng) SQL Server 首次執(zhí)行下列任何語(yǔ)句時(shí),都會(huì)自動(dòng)啟動(dòng)一個(gè)事務(wù):
| ALTER TABLE | INSERT |
| CREATE | OPEN |
| DELETE | REVOKE |
| DROP | SELECT |
| FETCH | TRUNCATE TABLE |
| GRANT | UPDATE |
在發(fā)出 COMMIT 或 ROLLBACK 語(yǔ)句之前,該事務(wù)將一直保持有效。在第一個(gè)事務(wù)被提交或回滾之后,下次當(dāng)連接執(zhí)行這些語(yǔ)句
中的任何語(yǔ)句時(shí),SQL Server 都將自動(dòng)啟動(dòng)一個(gè)新事務(wù)。SQL Server 將不斷地生成一個(gè)隱性事務(wù)鏈,
直到隱性事務(wù)模式關(guān)閉為止
例子:
begin transaction
save transaction A
insert into demo values('BB','B term')
rollback TRANSACTION A
create table demo2(name varchar(10),age int)
insert into demo2(name,age) values('lis',1)
rollback transaction
-- 在 Create table demo2 時(shí) SQL Server 已經(jīng)隱式創(chuàng)建一個(gè)Trans,知道提交或回滾
嵌套事務(wù)處理:
1: Trans 嵌套,將內(nèi)部的trans 合并到外部并形成一個(gè)Trans.
begin tran t1
----In the first trans .
Insert into demo2(name,age) values('lis',1)
---Second Trans begin transaction t2
insert into demo values('BB','B term')
commit transaction t2
----In the first trans .
Insert into demo2(name,age) values('lis',2)
rollback transaction t1
Note:
在一系列嵌套的事務(wù)中用一個(gè)事務(wù)名給多個(gè)事務(wù)命名對(duì)該事務(wù)沒(méi)有什么影響。系統(tǒng)僅登記第一個(gè)(最外部的)事務(wù)名。回滾
到其它任何名字(有效的保存點(diǎn)名除外)都會(huì)產(chǎn)生錯(cuò)誤。
事實(shí)上,任何在回滾之前執(zhí)行的語(yǔ)句都沒(méi)有在錯(cuò)誤發(fā)生時(shí)回滾。這語(yǔ)句僅當(dāng)外層的事務(wù)回滾時(shí)才會(huì)進(jìn)行回滾。
例:內(nèi)部事務(wù)回滾SQL server 報(bào)錯(cuò)。
begin tran t1
Insert into demo2(name,age) values('lis',1)
---Second Trans
--Server: Msg 6401, Level 16, State 1, Line 6
---Cannot roll back t2. No transaction or savepoint of that name was found.
begin transaction t2
insert into demo values('BB','B term')
rollback transaction t2
----In the first trans .
Insert into demo2(name,age) values('lis',2)
commit transaction t1
例: 內(nèi)部事務(wù)提交SQL server 不會(huì)報(bào)錯(cuò)。
begin tran t1
Insert into demo2(name,age) values('lis',1)
---Second Trans no error
begin transaction t2
insert into demo values('BB','B term')
commit transaction t2
----In the first trans .
Insert into demo2(name,age) values('lis',2)
commit transaction t1
SQL Server 的隔離級(jí)別:
1: 設(shè)置TimeOut 參數(shù)
Set Lock_TimeOut 5000
被鎖超時(shí)5秒將自動(dòng)解鎖
Set Lock_TimeOut 0
產(chǎn)立即解鎖,返回Error 默認(rèn)為-1,無(wú)限等待
2:
(SET TRANSACTION ISOLATION LEVEL
{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ | SERIALIZABLE})
READ COMMITTED
指定在讀取數(shù)據(jù)時(shí)控制共享鎖以避免臟讀,但數(shù)據(jù)可在事務(wù)結(jié)束前更改,從而產(chǎn)生不可重復(fù)讀取或
幻像數(shù)據(jù)。該選項(xiàng)是SQL Server 的默認(rèn)值。
避免臟讀,并在其他session 在事務(wù)中不能對(duì)已有數(shù)據(jù)進(jìn)行修改。共享鎖。
READ UNCOMMITTED
執(zhí)行臟讀或 0 級(jí)隔離鎖定,這表示不發(fā)出共享鎖,也不接受排它鎖。當(dāng)設(shè)置該選項(xiàng)時(shí),可以對(duì)數(shù)
據(jù)執(zhí)行未提交讀或臟讀;在事務(wù)結(jié)束前可以更改數(shù)據(jù)內(nèi)的數(shù)值,行也可以出現(xiàn)在數(shù)據(jù)集中或從數(shù)據(jù)
集消失。該選項(xiàng)的作用與在事務(wù)內(nèi)所有語(yǔ)句中的所有表上設(shè)置 NOLOCK 相同。這是四個(gè)隔離級(jí)別中
限制最小的級(jí)別。
REPEATABLE READ
鎖定查詢中使用的所有數(shù)據(jù)以防止其他用戶更新數(shù)據(jù),但是其他用戶可以將新的幻像行插入數(shù)據(jù)
集,且幻像行包括在當(dāng)前事務(wù)的后續(xù)讀取中。因?yàn)椴l(fā)低于默認(rèn)隔離級(jí)別,所以應(yīng)只在必要時(shí)才使
SERIALIZABLE
在數(shù)據(jù)集上放置一個(gè)范圍鎖,以防止其他用戶在事務(wù)完成之前更新數(shù)據(jù)集或?qū)⑿胁迦霐?shù)據(jù)集內(nèi)。這
是四個(gè)隔離級(jí)別中限制最大的級(jí)別。因?yàn)椴l(fā)級(jí)別較低,所以應(yīng)只在必要時(shí)才使用該選項(xiàng)。該選項(xiàng)
聯(lián)系客服