當前位置:首頁 » 編程語言 » sql事務怎麼寫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql事務怎麼寫

發布時間: 2022-11-23 04:40:32

sql 中 事務是用來幹嘛的 到底應該怎麼寫語句

SQL事務主要應用於保證多個表
數據更新
的一致性。如很多場合,要求一個表中更新或插入一條數據,另一個表也要更新或插入數據。要麼都做,要麼都不做,不能出現不一致的情況。例如從ATM中取錢需要以下幾個步驟:輸入一個PIN號碼,選擇一個帳戶類型和輸入你想要提取的資金的金額。如果你試圖從ATM中取出50元,然後操作失敗,你肯定不願意在沒有拿到錢的情況下被扣除50元。事務就可以被用來保證這種一致性。

⑵ 在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

⑶ 在VB中,怎樣對SQL進行事務處理

事務處理是在數據處理時經常遇到的問題,經常用到的方法有以下3種總結整理如下:

方法1:直接寫入到sql中

存儲過程中使用BEGINTRANS,COMMITTRANS,ROLLBACKTRANS實現

begintrans

declare@orderDetailsErrorint,@procuntErrorint

deletefrom[orderdetails]whereproctid=42

select@orderDetailsError=@@error

deletefromproctswhereproctid=42

select@procuntError=@@error

if(@orderDetailsError=0and@procuntError=0)

COMMITTRANS

else

ROLLBACKTRANS

優點:

所有事務邏輯包含在一個單獨的調用中

擁有運行一個事務的最佳性能

獨立於應用程序

限制:

事務上下文僅存在於資料庫調用中

資料庫代碼與資料庫系統有關


方法2:使用ADO.NET實現

使用ADO.NET實現,使用這種方式的優點是可以在中間層來管理事務,當然你也可以選擇在數據層來實現。

SqlConnection和OleDbConnection對象有一個BeginTransaction方法,它可以返回SqlTransaction

或者OleDbTransaction對象。而且這個對象有Commit和Rollback方法來管理事務

SqlConnectionsqlConnection=newSqlConnection("workstationid=WEIXIAOPING;packetsize=4096;userid=sa;initialcatalog=Northwind;persistsecurityinfo=False");

sqlConnection.Open();

SqlTransactionmyTrans=sqlConnection.BeginTransaction();

SqlCommandsqlInsertCommand=newSqlCommand();

sqlInsertCommand.Connection=sqlConnection

sqlInsertCommand.Transaction=myTrans;

try{

sqlInsertCommand.CommandText="insertintotbTree(Context,ParentID)values('北京',1)";

sqlInsertCommand.ExecuteNonQuery();

sqlInsertCommand.CommandText="insertintotbTree(Context,ParentID)values('上海',1)";

sqlInsertCommand.ExecuteNonQuery();

myTrans.Commit();

}catch(Exceptionex)

{

myTrans.Rollback();

}

finally

{

sqlConnection.Close();

}

優點:

簡單性

和數據據事務差不多的快

獨立於資料庫,不同資料庫的專有代碼被隱藏了

缺點:

事務不能跨越多個資料庫連接

事務執行在資料庫連接層上,所以需要在事務過程中維護一個資料庫連接

ADO.NET分布事務也可以跨越多個資料庫,但是其中一個SQLSERVER資料庫的話,通過用SQLSERVER連接伺服器連接到別的資料庫,但是如果是在DB2和Orcal之間就不可以。

以上兩種事務是經常用到的事務處理方法。


方法3COM+事務(分布式事務)

.NETFramework依靠MTS/COM+服務來支持自動事務。COM+使用(DTC)作為事務管理器和事務協調器在分布式環境中運行事務。

這樣可使.NET應用程序運行跨多個資源結合不同操作(例如,將定單插入SQLServer資料庫、將消息寫入Microsoft消息隊列(MSMQ)隊列、以及從Oracle資料庫檢索數據)

的事務。

COM+事務處理的類必須繼承System.EnterpriseServices.ServicedComponent,其實webservice就是繼承System.EnterpriseServices.ServicedComponent,所以webservice也支持

COM+事務。

定義一個COM+事務處理的類

[Transaction(TransactionOption.Required)]

publicclassDataAccess:System.EnterpriseServices.ServicedComponent

{

}

TransactionOption枚舉類型支持5個COM+值(Disabled,NotSupported,Required,RequiresNew,Supported)

Disabled忽略當前上下文中的任何事務。

NotSupported使用非受控事務在上下文中創建組件。

Required如果事務存在則共享事務,並且如有必要則創建新事務。

RequiresNew使用新事務創建組件,而與當前上下文的狀態無關。

Supported如果事務存在,則共享該事務。

一般來說COM+中的組件需要Required或Supported。當組件用於記錄或查帳時RequiresNew很有用,因為組件應該與活動中其他事務處理的提交或回滾隔離開來。

派生類可以重載基類的任意屬性。如DataAccess選用Required,派生類仍然可以重載並指定RequiresNew或其他值。

COM+事務有手動處理和自動處理,自動處理就是在所需要自動處理的方法前加上[AutoComplete],根據方法的正常或拋出異常決定提交或回滾。

手動處理就是調用ContextUtil類中EnableCommit,SetComplete,SetAbort方法。

publicstringtestTransaction()

{

try

{

ContextUtil.EnableCommit();

InsertARecord1();

InsertARecord2();

ContextUtil.SetComplete();

return"succeed!";

}

catch(Exceptionex)

{

ContextUtil.SetAbort();

return"failed!";

}

}

publicvoidInsertARecord1()

{

stringstrconn="workstationid=WEIXIAOPING;packetsize=4096;userid=sa;initialcatalog=Northwind;persistsecurityinfo=False";

SqlConnectionconn=newSqlConnection(strconn);

conn.Open();

SqlCommandcommand=newSqlCommand("insertintotbTree(Context,ParentID)values('北京',1)",conn);

command.ExecuteNonQuery();

conn.Close();

}

publicvoidInsertARecord2()

{

stringstrconn="workstationid=WEIXIAOPING;packetsize=4096;userid=sa;initialcatalog=Northwind;persistsecurityinfo=False";

SqlConnectionconn=newSqlConnection(strconn);

conn.Open();

SqlCommandcommand=newSqlCommand("insertintotbTree(Context,ParentID)values('上海',1)",conn);

command.ExecuteNonQuery();

conn.Close();

}

在需要事務跨MSMQ和其他可識別事務的資源(例如,SQLServer資料庫)運行的系統中,只能使用DTC或COM+事務,除此之外沒有其他選擇。DTC協調參與分布式事務的所有資源管理器, 也管理與事務相關的操作。

這種做法的缺點是,由於存在DTC和COM互操作性開銷,導致性能降低。

COM+事務處理的類必須強命名。

⑷ SQL事務概念是什麼,舉個例子說明什麼樣的東西是事務,與程序又有何區別,

資料庫事務是構成單一邏輯工作單元的操作集合。

舉例:轉賬是生活中常見的操作,比如從A賬戶轉賬100元到B賬號。站在用戶角度而言,這是一個邏輯上的單一操作,然而在資料庫系統中,至少會分成兩個步驟來完成:

1、將A賬戶的金額減少100元

2、將B賬戶的金額增加100元。

與程序的區別:一個程序中包含多個事務。在關系資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序。

(4)sql事務怎麼寫擴展閱讀:

事務必須具備四個屬性,簡稱ACID屬性:

1、原子性(Atomicity):事務是一個完整的操作。事務的各步操作是不可分的(原子的);要麼都執行,要麼都不執行。

2、一致性(Consistency):當事務完成時,數據必須處於一致狀態。

3、隔離性(Isolation):對數據進行修改的所有並發事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴於或影響其他事務。

4、永久性(Durability):事務完成後,它對資料庫的修改被永久保持,事務日誌能夠保持事務的永久性。