Sql Server数据库--》事务

时间:2022-09-13 23:54:36

 

事务:更多的是一种处理机制(同生共死)

事务是对增删改而言的(因为她们会改变数据)

 

事务是对多条语句而言,多个sql语句组成,整体执行 

事务的4个特点叫做ACID:分别为:

1,A:原子性->事务不可以再分(意思是事务里的所有sql语句,要同时执行)

2,C:一致性-> 事务在操作后,表的数据需要保持莫种程度的一致性(sql语句操作后,要么都成功,要么都失败)

3,I:隔离->事务是单独执行的,一个事务与其它的事务隔离,没有关系

4,D:持久性->但事务成功提交,那么对数据表的影响永久保留

 

事务的创建:

1,开启事务:begin transation

2,提交事务:commit transation

3,回滚事务:rollback transaction

 

注意:事务一旦开启,就必须提交或回滚

如果没有提交或回滚,那么你再次去访问数据表,就打不开数据了

Eg:

Declare @error int=0//创建变量,记录错误信息 0为正确

begin transaction//开启事务

update bank set cmoney-=1000 where name=’aa’

Set @error=@error+@@error

update bank set cmoney+=1000 where name=’bb’

Set @error=@error+@@error

If(@error<>0)//如果error不等于0,说明有错误

  rollback transaction //回滚

else

  commit transaction//提交

 

在VS中使用事务:步骤

String conStr=”server=.;user id=sa;pwd=123;database=MySchoolMoreData”;

Using(SqlConnection conn=new SqlConnection(conStr))

{

  //创建事务,不能new,conn点方法begTransaction()

  SqlTansaction st=null;

  Try{

      Conn.open();//打开通道

      st=conn.begTransaction();

      String sql1=“update bank set cmoney-=1000 where name=’aa’”;

       String sql2=“update bank set cmoney+=1000 where name=’bb’”;

      //告诉服务器使用事务机制进行处理

  SqlCommand comm=new SqlCommand(sql2,conn,st);

  comm.ExecuteNonQuery();

  Console.WriteLine(“ok1”);

  comm.commandText=sql1;

  comm.ExecuteNonQuery();

  Console.WriteLine(“ok2”);

  //都Ok的话,就提交事务了

  st.Commit();

  Console.ReadKey();

}

Catch(Exception ex)//到了这里 说明sql语句有错

{

  Conson.WriteLine(ex.Message);

  st.RollBack();//回滚

  Conson.ReadKey();

}

}