標籤:commit ssms sql font arc nsa nvarchar prim rollback
1 準備資料 及 涉及到的幾個設定
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --設定事務會話的隔離等級(預設值為 READ UNCOMMITTED ),只對當前進程有效(就是說只對開啟SSMS當前查詢時段有效,再開啟另一個查詢時段就無效了)
SET XACT_ABORT OFF --設定精確終止(暫且這麼叫)開關(預設值為 OFF) ,只對當前進程有效(就是說只對開啟SSMS當前視窗有效,再開啟另一個就無效了)
IF NOT OBJECT_ID(‘Score‘) IS NULL DROP TABLE [Score] GO IF NOT OBJECT_ID(‘Student‘) IS NULL DROP TABLE [Student] GO CREATE TABLE Student (stuid int NOT NULL PRIMARY KEY, stuName Nvarchar(20) ) CREATE TABLE Score (stuid int NOT NULL REFERENCES Student(stuid),--外鍵 scoreValue int ) GO INSERT INTO Student VALUES (101,‘胡一刀‘) INSERT INTO Student VALUES (102,‘袁承志‘) INSERT INTO Student VALUES (103,‘陳家洛‘) INSERT INTO student VALUES (104,‘張三丰‘) GO
2 復原案例
--最簡單復原--下面語句可以分開執行,一次執行一行BEGIN TRAN --開啟事務,設定事務開始點/*命令已成功完成。*/SELECT * FROM score/*(0 行受影響)說明:因為表裡沒有資料,所以查詢返回條數為0.*/INSERT INTO score VALUES (101, 59) --插入資料,此時如果查看訊息:(1 行受影響)/*(1 行受影響)*/SELECT * FROM score/*stuid scoreValue101 59(1 行受影響)說明:本進程內(本查詢時段)可以查到此條已經插入的資料,但是其它進程(查詢時段)是無法查到資料的。因為現在事務並沒有提交,SQLSERVER 的預設隔離等級為 READ COMMITTED ,此隔離等級在其它進行中是無法讀取到未提交資料的。*/ROLLBACK/*命令已成功完成。說明:復原未提交事務。*/SELECT * FROM score/*(0 行受影響)因為已經復原了,所以查不出資料了。*/
SQL SERVER 事務相關