设为首页 收藏本站
查看: 1023|回复: 0

[经验分享] SQL SERVER2000教程-第七章 Transact-SQL编程 第五节 事务和锁

[复制链接]

尚未签到

发表于 2018-10-11 12:41:47 | 显示全部楼层 |阅读模式
C.自动提交事务:   自动依据每个批次确立事务,如果某个批次回  滚不影响其他的批处理语句的执行;
  例题:银行转帐
  create proc proc_bank
  @accounts1 char(4),@accounts2 char(4),@price int
  AS
  BEGIN
  begin tran
  update 帐户表 set 帐户余额=帐户余额-@price where 帐号=@accounts1
  if @@error0
  rollback tran
  update 帐户表 set 帐户余额=帐户余额+@price where 帐号=@accounts2
  if @@error0
  rollback tran
  else
  commit tran
  END
  4. 事务的隔离级别
  (1)提交读:是SQLServer的默认模式。如果事务已提交,则该级别允许读取数据。
  (2)未提交读:是最低的限制的隔离级别。这事务结束前可更改数据以及删除和添加行。
  (3)可重复读:进行锁定,这样将只能添加行而不能更新数据。
  (4)可串行读:整个数据集将被锁定, 其他用户将不能添加或更新。
  5. 设置事务的隔离级别
  Set Transction Isolation Level {Read Committed|Read Uncommitted|Repeatable Read|Serializable}
  READ COMMITTED
  指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。
  READ UNCOMMITTED
  执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现
  在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。
  REPEATABLE READ
  锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所
  以应只在必要时才使用该选项。
  SERIALIZABLE
  在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时
  才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。
  脏读:包含未提交数据的读。     例如,事务1 更改了某行。事务2 在事务1 提交更改之前读取已更改的行。如果事务1 回滚更改,则事务2 便读取了逻辑上从未存在过的行。
  不可重复读取:  当某个事务不止一次读取同一行,并且一个单独的事务在两次(或多次)读取之间修改该行时。因为在同一个事务内的多次读取之间修改了该行,所以每次读
  取都生成不同值,从而引发不一致问题
  幻像:通过一个任务,在以前由另一个尚未提交其事务的任务读取的行的范围中插入新行或删除现有行。带有未提交事务的任务由于该范围中行数的更改而无法重复其原始读
  取。如果某个连接设置其事务隔离级别为可串行,则 SQL Server 使用键范围锁定以防止幻像。
  6. 死锁处理
  死锁概念:
  在多用户环境下,当不同用户分别锁定一个资源之后,双方都等待对方释放它所锁定的资源时,就产生一个锁定请求环,
  从而出现死锁现象。
  事务会对访问或更改的数据加锁。
  可以通过强制任务释放锁:
  Set deadlock_priority{low|normal}
  (如果您将一个任务的优先级设为Low,SQL Server将在死锁的情况下强制该任务释放锁)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620388-1-1.html 上篇帖子: SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同 下篇帖子: SQL SERVER2000教程-第七章 Transact-SQL编程 第二节 流程控制命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表