事務:更多的是一種處理機制(同生共死)
事務是對增刪改而言的(因為她們會改變數據)
事務是對多條語句而言,多個sql語句組成,整體執行
事務的4個特點叫做ACID:分別為:
1,A:原子性->事務不可以再分(意思是事務里的所有sql語句,要同時執行)
2,C:一致性->事務在操作后,表的數據需要保持莫種程度的一致性(sql語句操作后,要么都成功,要么都失敗)
3,I:隔離->事務是單獨執行的,一個事務與其它的事務隔離,沒有關系
4,D:持久性->但事務成功提交,那么對數據表的影響永久保留
事務的創建:
1,開啟事務:begintransation
2,提交事務:committransation
3,回滾事務:rollbacktransaction
注意:事務一旦開啟,就必須提交或回滾
如果沒有提交或回滾,那么你再次去訪問數據表,就打不開數據了
Eg:
Declare@errorint=0//創建變量,記錄錯誤信息0為正確
begintransaction//開啟事務
updatebanksetcmoney-=1000wherename=’aa’
Set@error=@error+@@error
updatebanksetcmoney+=1000wherename=’bb’
Set@error=@error+@@error
If(@error<>0)//如果error不等于0,說明有錯誤
rollbacktransaction//回滾
else
committransaction//提交
在VS中使用事務:步驟
StringconStr=”server=.;userid=sa;pwd=123;database=MySchoolMoreData”;
Using(SqlConnectionconn=newSqlConnection(conStr))
{
//創建事務,不能new,conn點方法begTransaction()
SqlTansactionst=null;
Try{
Conn.open();//打開通道
st=conn.begTransaction();
Stringsql1=“updatebanksetcmoney-=1000wherename=’aa’”;
Stringsql2=“updatebanksetcmoney+=1000wherename=’bb’”;
//告訴服務器使用事務機制進行處理
SqlCommandcomm=newSqlCommand(sql2,conn,st);
comm.ExecuteNonQuery();
Console.WriteLine(“ok1”);
comm.commandText=sql1;
comm.ExecuteNonQuery();
Console.WriteLine(“ok2”);
//都Ok的話,就提交事務了
st.Commit();
Console.ReadKey();
}
Catch(Exceptionex)//到了這里說明sql語句有錯
{
Conson.WriteLine(ex.Message);
st.RollBack();//回滾
Conson.ReadKey();
}
}
新聞熱點
疑難解答