sql server中的transaction、error check、lock、isolation level和save point

本文详细介绍了SQL Server中事务管理的重要概念,包括事务的基础知识、错误检查方法、锁的类型与作用、隔离级别的设定及其影响,以及保存点的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. transaction及错误检查
    • sql server 中最重要的知识点莫过于事务,比如很多oltp(联机事务处理)应用程序。什么是事务?事务就是一系列sql语句的集合。事务包括隐性事务(例如insert,update等语句)和显性事务(用begin tran语句显式指明的事务)。事务中通常需要进行错误检查,用@@error来进行检查,比如:   begin tran
         update a set id =5 where id=1
         if @@error<>0 rollback tran
         update a set id =5 where id=2
         if @@error<>0 rollback tran
      commit tran
  2. lock (锁)
    • 按锁的粒度分,锁可以分成如下几类:  key lock(键锁)--->row lock(行级锁)--->page lock(页级锁)--->extent lock(扩展盘曲锁)------->table lock(表锁)--->database lock(数据库锁)
    • 按锁的模式分,锁可以分为如下几类:holdlock(共享锁),xlock(排它锁),updlock(更新锁),schlock(架构锁),intent lock(意向锁)等等。如果要查看锁的类型,使用系统存储过程sys_lock来查看。
  3. isolation level (隔离级别)
    • 事务有4中隔离级别,分别为:
      1. read uncommitted(未提交读)---读未提交,可以读取到内存中已经修改但是没有保存到硬盘上的信息,即允许数据脏读。
      2. read committed(提交读)---读提交,只能读取到已经提交到硬盘的信息,如果信息在内存中修改了,但是还没有提交到硬盘,即没有commit tran,则另一个事务什么也读取不到,被另一事物阻塞在此。当修改数据的事务一旦commit tran,则读取数据的事务立即运行,修改后的数据被读取到。
      3. repeatable read(重复读)---当事务a设置隔离级别为repeatable read在对数据进行读取,此时,事务b来修改数据,由于repeatable read隔离级别对操作的实体(行或者表)设置了更新锁,所以此时事务b不能对数据进行更新,但是事务b可以insert新数据,因为repeatable read隔离级别对操作的实体(行或者表)没有设置排它锁,所以事务a可以读取到幻象。
      4. serializable(串行读)---串行化,即事务一个接一个地进行操作,包括对操作实体的update,insert,select等等。
    • 实际上隔离级别和锁的关系是密不可分的,隔离级别的实现本质上是对锁来进行操作,由于我们在操作一个实体对象的时候不能准确地判断到底应该上什么具体的锁 ,所以鉴于此,sql server数据库为我们开辟了一个简单的途径,即使用隔离级别。实体的隔离级别越高,说明实体上锁的数量越多,种类越复杂;实体的隔离级别越高,并行化的几率越低,串行化的几率越高。
  4. save point(保存点)
    • 保存点的出现,是为了在事务恢复时更加地迅速和容易,因为不用把所有的操作都恢复,而是只用恢复到保存点即可,关于如何恢复以及更具体的知识,会在事务的恢复博客中详述。举个简单的例子:   begin tran

      和 "sql server中的transaction、error check、lock、isolation level和save point" 有关的数据库编程小帖士:

      strong>GREATEST
              GREATEST函数返回一数值列表中的最高数值。可使用GREATEST函数处理数字数据和字符数据。
         update a set id =4 where id=1 
         save tran t1

         update a set id =3 where id=2
         if @@error<>0 rollback t1
         update a set id=5 where id =3

      commit tran
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值