SQL2008事務回滾的兩種方式

2021-10-06 08:35:55 字數 2218 閱讀 6235

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 開發環境下,有兩種方法能夠完成事務的操作...