1. 程式人生 > >隱式事務,顯式事務,自動提交事務

隱式事務,顯式事務,自動提交事務

1,事務在資料庫中主要用於保證資料的一致性,防止出現錯誤資料
事務的基本控制語句
BEGIN TRANSACTION 表示本地事務的開始
BEGIN DISTRIBUTED TRANSACTION表示分散式事務起始
COMMIT TRANSACTION表示事務的提交
ROLLBACK TRANSACTION表示事務的回滾
COMMIT事務的提交 與COMMIT TRANSACTION功能相同
ROLLBACK 事務的回滾與ROLLBACK TRANSACTION功能相同
SAVE TRANSACTION設定事務儲存點
建立表語句

CREATE TABLE ORDERINFO(
CUSTOMID INT NULL,
PRODUCTID INT NULL,
ORDERQUANTITY VARCHAR(100) NULL
)
SELECT * FROM  ORDERINFO
顯式事務
–通過begin transaction 語句來顯式啟動事務,並由commit transaction語句進行提交
—begin transaction 之後的所有操作都在一個事務中一旦出現錯誤事務會進行回滾,將清除begin transaction之後所有操作,回到原點
–語法如下
begin {tran|transaction}[
{transaction_name |@tran_name_varible}
[with mark[‘description’]]
]
[;]
–begin 開始事務的關鍵詞
–{tran|transaction},和begin一起表示事務開始
–transaction_name,事務名稱
–@tran_name_varible,變數名稱,將接受一個事務名稱。該變數只能通過char,varchar,nchhar,nvarchar資料型別宣告,
–with mark 在日誌中標記事務 description 是描述該標記的字串
–下面介紹如何使用顯式事務

BEGIN TRANSACTION TR_ORDERINFO
INSERT INTO [dbo].[ORDERINFO] (CUSTOMID,PRODUCTID,ORDERQUANTITY)
VALUES(14,11110,'10')  
GO
UPDATE ORDERINFO SET PRODUCTID=120000 WHERE CUSTOMID=14
GO
COMMIT TRANSACTION TR_ORDERINFO

–第1行表示顯式的開啟一個事務 事務名稱為 TR_ORDERINFO
–第2-3行表示為 ORDERINFO表加入資料
–第5行表示在表中修改資料
–第7行表示提交事務 如果沒有第7行表示進入等待狀態而查不到資料

–2隱式事務
–隱式事務需要用T_語句才能開啟,開啟隱式事務的語句是 
SET IMPLICIT_TRANSACTIONS ON
–一旦隱式事務開啟,資料庫例項第一次執行alert table,insert,create,open,delete,revoke,drop,select,fetch,truncate table,grant,update語句時,會自動開啟一個事務,開啟的事務需要利用commit或rollback結束;當事務結束時,一旦執行以上型別的語句,會再次自動開啟一個新的事務,
–這樣就形成了一個事務鏈

SET IMPLICIT_TRANSACTIONS ON 
INSERT INTO [dbo].[ORDERINFO] (CUSTOMID,PRODUCTID,ORDERQUANTITY)
VALUES(16,21110,'20')  
GO
UPDATE ORDERINFO SET PRODUCTID=220000 WHERE CUSTOMID=16
GO
COMMIT 
SET IMPLICIT_TRANSACTIONS OFF

–第1行表示開啟隱式事務
–第2-3行表示為 ORDERINFO表加入資料
–第5行表示在表中修改資料
–第7行表示提交事務 第8行關閉隱式事務

–3,自動提交事務
–自動提交事務是sqlserver預設模式,該型別不需要開發人員手工做任何操作,每個單獨的T_SQL語句都在其完成後自動提交,如果出現錯誤則回滾,
–所以開發人員無法對其嚴格控制不適合大規模匯入,不適合業務關聯資料錄用,如果完成一項業務需要3句語句,當第二條出錯時,第一條無法撤銷,所以無法保證事務一致型