事務sql
① sql如何寫事務
begin transaction
declare @k int
set @k=0
insert into a values('1','str')
if @@error<>0
set @k=@k+1
insert into b values('2','str')
if @@error<>0
set @k=@k+1
update a set name='stu' where id='1'
if @@error<>0
set @k=@k+1
if @K<>0
begin
rollback transaction
return
end
commit transaction
② sql中 事務的作用 什麼情況下要用事務 需要什麼條件
事物一般用在並發操作多張表的時候使用,用於保證用戶的數據完整性~
不需要什麼條件,在對多張關聯表做操作的時候,最好就是加上事物~
③ 什麼是事務,SQL Server中的事務有什麼特點
原子性
事務必須是原子工作單元;對於其數據修改,要麼全都執行,要麼全都不執行。
一致性
事務在完成時,必須使所有的數據都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。
隔離
由並發事務所作的修改必須與任何其他並發事務所作的修改隔離。事務識別數據時數據所處的狀態,要麼是另一並發事務修改它之前的狀態,要麼是第二個事務修改它之後的狀態,事務不會識別中間狀態的數據。這稱為可串列性,因為它能夠重新裝載起始數據,並且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。
持久性
事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
④ sql中什麼是事務啊
事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新資料庫中各種數據項的一個程序執行單元(unit)。
事務通常由高級資料庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。
(4)事務sql擴展閱讀
事務類型
(1)手動事務
手動事務允許顯式處理若干過程,這些過程包括:開始事務、控制事務邊界內的每個連接和資源登記、確定事務結果(提交或中止)以及結束事務。
(2)自動事務
.NET 頁、XML Web services方法或 .NET Framework 類一旦被標記為參與事務,它們將自動在事務范圍內執行。您可以通過在頁、XML Web services 方法或類中設置一個事務屬性值來控制對象的事務行為。
⑤ c#里用事務和sql里用事務的區別
我覺得運行環境不一樣,C#中事務運行在NET Framework的託管環境下,SQL語句里的事務運行在SQL Server的數據引擎里。
⑥ SQL中事務有幾種
有三種。第一種是顯式聲名的事務,這種事務要以begin
transaction為事務的起始標志。第二種是自動提交事務,這是sql
server的預設設置。每一個t-sql語句在執行完成後會被自動提交。第三種是隱含事務,在這種方式下,sql
server會在當前事務被提交或回滾後自動啟動一個新的事務,這個新事務直到用戶執行commit或rollback為止,這時系統又會啟動一個新事務。這樣就形成了一個連續的事務鏈。
⑦ SQL事務
SQL中沒有像 DELPHI 那樣 TRY Finnal 的方式,通常都是這樣寫:
--判斷表的存在性
If NOT Exists(select * from dbo.sysobjects where name='sysobjects')
--自定義錯誤號,說明表不存在。
Return -1
--執行查詢
select * from table1
--有錯誤反回錯誤號
If @@Error<>0
Return @@Error
--正確反回0
Return 0
--補充回答
在Sql Server中,是沒有象開發工具那種的容錯處理,他有的只是判斷對象的存在性及用事務來解決數據的完整性、一致性等等。但通用的做法都是在可能發生錯誤的地方設置錯誤處理或反回錯誤號,自定義的也可以。這樣在程序里我們可以捕獲錯誤號來進行相應的錯誤提示。
--補充回答
「多人同時訪問時一旦某個事務永久鎖定了一個表,那其它人都無法訪問了」你說的這個問題是資料庫對象鎖定問題,跟你提問的問題有所區別,資料庫對象鎖定實質是由DBMS完成的,如果對象真的被鎖定了的話,只有在對象被解鎖以後才能對其進行操作,當然能進行什麼樣的操作也跟鎖的類型及類度相關。開發者對對象進行加鎖,也要分不同操作進行,操作完成後DBMS會自動解鎖。
如果出現像你說的死所現像的話,DBMS是不能完成解鎖功能的,只有人工進行處理了。
至於你提出的問題,你的想法是好的,但是DBMS都是通過提前判斷來進行容錯的,或者拋出錯誤號在程序中進行捕獲處理。
⑧ 事務在SQL中有什麼作用
事務的好處在於,當你需要對多個表進行相關性操作時,使用BeginTrans()開啟事務,然後操作,如果中間哪個表更新出錯了,或者數據有問題,你可以用RollBack()方法在取消之前的相關性操作,如果沒有錯,那就使用Commit()方法提交你的修改。另外,在這個過程中,所有你改動的內容只對你自己有效,別人不能知道你改了什麼,也不能對你正在改的表做修改,直到你提交之後,別人才能修改這些表,檢索出你修改過的內容。
⑨ sql server中的事務是什麼意思
事務是單個的工作單元。如果某一事務成功,則在該事務中進行的所有數據修改均會提交,成為資料庫中的永久組成部分。如果事務遇到錯誤且必須取消或回滾,則所有數據修改均被清除。 SQL Server 以下列事務模式運行。自動提交事務 每條單獨的語句都是一個事務。顯式事務 每個事務均以 BEGIN TRANSACTION 語句顯式開始,以 COMMIT 或 ROLLBACK 語句顯式結束。隱式事務 在前一個事務完成時新事務隱式啟動,但每個事務仍以 COMMIT 或 ROLLBACK 語句顯式完成。批處理級事務只能應用於多個活動結果集 (MARS),在 MARS 會話中啟動的 Transact-SQL 顯式或隱式事務變為批處理級事務。
⑩ 在SQL中怎樣使用事務
SQL Server 需要顯示的定義 開始一個事務.
BEGIN TRANSACTION;
例如:
1> BEGIN TRY
2> -- SQL Server 需要顯示的定義 開始一個事務.
3> BEGIN TRANSACTION;
4> -- 插入2條同樣的數據,使主鍵重復,引發錯誤後回滾事務.
5> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
6> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
7> -- 執行成功後,需要提交事務.
8> COMMIT;
9> END TRY
10> BEGIN CATCH
11> PRINT('Main.錯誤代碼 = ' + STR(ERROR_NUMBER()));
12> PRINT('Main.錯誤嚴重級別 = ' + STR(ERROR_SEVERITY()));
13> PRINT('Main.錯誤狀態代碼 = ' + STR(ERROR_STATE()));
14> PRINT('Main.錯誤信息 = ' + ERROR_MESSAGE());
15> -- 回滾事務
16> ROLLBACK;
17> END CATCH
18>
19> go