.Net_05_事务的基本语法(Sql 语句)
2013-01-28 15:04
316 查看
事务
就是将一推脚本代码放在一起,并将其作为一个整体
可以控制这些代码执行完成以后,是否保留执行结果
还是执行代码以后,就和没有执行一样(不起效果)
语法:
begin transaction --开启一个事务
--其后的所有代码都是一个整体,表示可以使用一定语句限制这些代码是否起作用
begin try
--sql 语句
commit;--表示事务提交
end try
begin catch
rollback;--表示回滚
end catch
go
另一种方式:
在正常情况下数据库的处理均是事务
-> 我们执行的一个插入,删除等等一系列操作,每一句话都是一个事务(SQL Server 默认)
-> 事务处理是一个原子操作
-> 只有提交以后,数据才会受影响
-> 异常,出错以后会爆红,表示执行代码有问题
-> 即使使用@@error变量记录出错信息,但是这么执行在C#中就是异常
-> 考虑异常代码块
-> 在使用事务的时候容易出现锁的概念
-> 如果一个数据表在被修改,那么这张表就得到了“排他锁”
-> 如果一个数据在读取一张表,那么这张表就得到了“共享锁”
共享锁(S锁):
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
简要说明为什么会发生死锁?解决死锁的主要方法是什么?
若干事务相互等待释放封锁,就陷入无限期等待状态,系统就进入死锁
解决死锁的方法应从预防和解除的两个方面着手:
(1)死锁的预防方法:①要求每一个事务必须一次封锁所要使用的全部数据(要么全成功,要么全不成功)②规定封锁数据的顺序,所有事务必须按这个顺序实行封锁。
(2)允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事物撤消,回滚这个事务,并释放此事务持有的封锁,使其他事务继续运行。
(3)对数据库添加分布式应用,进行读写分离能有效的减低死锁的概率!
就是将一推脚本代码放在一起,并将其作为一个整体
可以控制这些代码执行完成以后,是否保留执行结果
还是执行代码以后,就和没有执行一样(不起效果)
语法:
begin transaction --开启一个事务
--其后的所有代码都是一个整体,表示可以使用一定语句限制这些代码是否起作用
begin try
--sql 语句
commit;--表示事务提交
end try
begin catch
rollback;--表示回滚
end catch
go
begin transaction declare @myError int; set @myError = 0; begin try update bank set balance=balance - @balance where cid=@from; update bank set balance=balance + @balance where cid=@to; commit; set @res = 1; --表示成功 end try begin catch rollback; set @res = 0; --表示失败 end catch go
另一种方式:
begin transaction declare @myError int; set @myError = 0; update bank set balance=balance - 1000 where cid='0001'; set @myError = @myError + @@ERROR; update bank set balance=balance + 1000 where cid='0002'; set @myError = @myError + @@ERROR; if(@myError > 0) begin rollback end else begin commit end; go
在正常情况下数据库的处理均是事务
-> 我们执行的一个插入,删除等等一系列操作,每一句话都是一个事务(SQL Server 默认)
-> 事务处理是一个原子操作
-> 只有提交以后,数据才会受影响
-> 异常,出错以后会爆红,表示执行代码有问题
-> 即使使用@@error变量记录出错信息,但是这么执行在C#中就是异常
-> 考虑异常代码块
-> 在使用事务的时候容易出现锁的概念
-> 如果一个数据表在被修改,那么这张表就得到了“排他锁”
-> 如果一个数据在读取一张表,那么这张表就得到了“共享锁”
共享锁(S锁):
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
简要说明为什么会发生死锁?解决死锁的主要方法是什么?
若干事务相互等待释放封锁,就陷入无限期等待状态,系统就进入死锁
解决死锁的方法应从预防和解除的两个方面着手:
(1)死锁的预防方法:①要求每一个事务必须一次封锁所要使用的全部数据(要么全成功,要么全不成功)②规定封锁数据的顺序,所有事务必须按这个顺序实行封锁。
(2)允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事物撤消,回滚这个事务,并释放此事务持有的封锁,使其他事务继续运行。
(3)对数据库添加分布式应用,进行读写分离能有效的减低死锁的概率!
相关文章推荐
- .Net_06_创建存储过程的基本语法(Sql 语句)
- .Net_01_建库建表的基本语法(Sql 语句)
- .Net_07_创建触发器的基本语法(Sql 语句)
- SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数
- .Net_02_增删改查的基本语法 (Sql 语句)
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- SQL语句的基本语法
- 动态sql语句基本语法
- 动态sql语句基本语法
- [导入]动态sql语句基本语法
- 动态sql语句基本语法
- 《SQL语句的基本语法》 {转!!}
- SQL语句的基本语法 汇总,引用
- 动态sql语句基本语法
- Oracle数据库Sql语句详解之SELECT查询基本语法
- 动态sql语句基本语法