事务:更多的是一种处理机制(同生共死)
事务是对增删改而言的(因为她们会改变数据)
事务是对多条语句而言,多个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();
}
}
新闻热点
疑难解答