1.xact_abort
1)set xact_abort off時,回滾產生錯誤的transact-sql語句,而事務將繼續進行處理,(注:錯誤嚴重或者語法錯誤時可能回滾整個事務)
2) set xact_abort on時,如果transact-sql語句產生執行時錯誤,整個事務將終止並回滾,
步驟1:
create table [dbo].[a](
[id] [int] identity(1,1) not for replication not null,
[name] [nvarchar](5) null,
[createdate] [datetime] null,
constraint [pk_a] primary key clustered
([id] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]
go--預設xact_abort=off
set xact_abort off
begin tran
insert into [dbo].[a](name,createdate) values('測試off',getdate());
insert into [dbo].[a](name,createdate) values('測試off_異常',getdate());
insert into [dbo].[a](name,createdate) values('測試off',getdate());
commit tran
(1 行受影響)
訊息 8152,級別 16,狀態 4,第 3 行
將截斷字串或二進位制資料。
語句已終止。
(1 行受影響)
select * from [dbo].[a]
id name createdate
1 測試off
2018-10-31 15:06:09.330
3 測試off 2018-10-31 15:06:09.333
注意:事務的回滾對於擁有自增主鍵的表來說,insert的資料是被刪除,update和delete的資料是被恢復 。所以上面所顯示的id=3 。
步驟2:
set xact_abort on
begin tran
insert into [dbo].[a](name,createdate) values('測試on',getdate());
insert into [dbo].[a](name,createdate) values('測試on_異常',getdate());
insert into [dbo].[a](name,createdate) values('測試on',getdate());
commit tran
同樣執行select 查詢語句 得到如下結果
id name createdate
1 測試off
2018-10-31 15:06:09.330
3 測試off 2018-10-31 15:06:09.333
證明事務全部回滾成功。(注意下次新增資料的時候,id的值。。。)
2.rollback
在sql中用事務的時候一般是這麼寫。
declare @error int ;
begin tran
begin try
insert into [dbo].[a](name,createdate) values('測試異常',getdate());
insert into [dbo].[a](name,createdate) values('測試異常_錯誤',getdate());
insert into [dbo].[a](name,createdate) values('測試異常',getdate());
end try
begin catch
set @error=1
end catch
if @error>0
rollback tran
else
commit tran
注:
Pymsql 兩種情況下 的事務回滾
示例一 無 autocommit true 情況下conn pymysql.connect 建立資料庫連線 host 10.10.11.131 要連線的資料庫所在主機ip user chb 資料庫登入使用者名稱 password 123456 登入使用者密碼 charset utf8 編碼,注意不能...
Sql server 事務的兩種用法
事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server 能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。在 sql server net 開發環境下,有兩種方法能夠完成事務的操作...
Sql server 事務的兩種用法
事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server 能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。在 sql server net 開發環境下,有兩種方法能夠完成事務的操作...