SQL Server 游标、事务、锁

前言

SQL Server 拥有这么强大的功能,但是我们是否将这种宏利真的学习明白了?这篇博客我将对游标、事务、锁进行总结学习。

游标

正常面向集合的思维方式是:
这里写图片描述
而对于游标来说:
这里写图片描述
在性能上,游标会占更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量……从游标对数据库的读取方式来说,不难看出游标为什么占用更多的资源,打个比方:当你从ATM取钱的时候,是一次取1000效率更高呢,还是取10次100?既然游标有这么多不便利,那我们为什么还要学习和使用游标呢?

  • 现存系统有一些游标,我们查询必须通过游标来实现。
  • 作为一个备用方式,当我们用尽了while循环,子查询,临时表,表变量,自建函数或其他方式扔来无法实现某些查询的时候,使用游标实现。

在T-SQL中,游标的生命周期由5部分组成:

1.定义游标

'定义后直接赋值
declare test_Cursor cursor for
select * from dbo.tb1

2.打开游标

open test_cursor

3.使用游标

'游标位置:next|prior|first|last
fetch next from test_cursor into 变量

4.关闭游标

close test_cursor

5.释放游标

deallocate test_cursor

事务

概念

事务是一种机制,是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:银行、保险公司以及证券公司交易系统等。

属性

  • 原子性:事务是一个完整的操作。
  • 一致性:当事务完成时,数据必须处于一致状态。
  • 隔离性:对数据进行修改的所有并发事务是彼此隔离的。
  • 持久性:事务完成后,它对于系统的影响是永久性的。

创建事务

  • 开始事务:begin transaction
  • 提交事务:commit transaction
  • 回滚事务:rollback transaction
  • 保存事务:save transaction

事务模式

  • 显示事务
  • 隐示事务
  • 自动提交事务
  • 批处理级事务

对于锁,顾名思义能知道个大概意思,但是它究竟是个什么东西?继续往下看吧。

锁是一种规则,是用来控制同步数据访问机制的一种机制。例如:数据库中的锁就像交通信号灯,而车子就是每个事务。如果没有好好的控制信号灯的话就会堵车,同样,如果没有控制好锁,事务就会堵塞。

锁的定制

数据库的资源如果只由一个用户使用只要程序没问题,数据就不会出现不一致的情况。如果两个或多个用户同时修改就有可能出现并发冲突导致以下错误:

  • 更新丢失:指两个用户同时更新一个数据库对象,其中一个用户更新覆盖了之前那个用户的更新从而导致错误。
  • 不可重复读:一个用户在一个事务中读取的数据前后不一致,其中可能是有别的用户做了修改。
  • 幻读:一个用户读取一个结果集后,其他用户对该结果集进行了插入或删除,第一个用户再读这个数据集会发现数据多了或者少了。

而为了解决这些问题,SQL Server 数据库引入了锁。

  • 共享锁S:
    共享锁允许并发事务读取 (SELECT) 一个资源。资源上存在共享 (S) 锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享 (S) 锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享 (S) 锁。
  • 排它锁X:
    排它锁可以防止并发事务对资源进行访问。其它事务不能读取或修改排它 (X) 锁锁定的数据。
  • 更新锁U:
    更新 (U) 锁可以防止通常形式的死锁。一般更新模式由一个事务组成,此事务读取记录,获取资源(页或行)的共享 (S) 锁,然后修改行,此操作要求锁转换为排它 (X) 锁。若要避免潜在的死锁问题,请使用更新 (U) 锁。一次只有一个事务可以获得资源的更新 (U) 锁。如果事务修改资源,则更新 (U) 锁转换为排它 (X) 锁。否则,锁转换为共享锁。

死锁:是指两个或多个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们都将无法推进下去,此时称系统处于死锁。

锁的粒度:锁粒度是指SQL Server锁定数据资源的类型。锁定的粒度越小,数据库的并发性越高。因为锁定越小的数据库资源,不会影响其他用户使用其他资源。

猜你喜欢

转载自blog.csdn.net/Hellen0708/article/details/82116431