`

游标、事务并发和锁三者之间的那点事

阅读更多

对数据库学习的不断深入,对游标的认识也在逐渐加深,游标与事务、锁有着密不可分的关系。 无论是事务、锁还是游标相对于数据库来说最主要目的是保证数据的完整性。对事务并发、锁定的深入学习才能更加完善对游标的理解。少说废话,下面进入本篇文章的正题。

首先,我们讲解游标与事务并发的那点事

事务是为完成特定任务,将一条或多条的SQL语句组合在一起。有效的使用事务不但可以提高数据的安全性,而且还可以增强数据的处理效率。如果没有锁定且多个用户同时访一个数据库,多个事务使用相同的数据时就会出现事务并发的问题。

我们一张图讲解事务并发的四个方面:

从上图我们可以看出来,事务并发的四个方面,归根结底都有相似的地方:多个事务修改同一行数据,发生错误。

对比着学习游标的并发问题,游标的并发与事务的并发基本相同:多个游标修改同一行数据,发生错误。

同样,我们还是一张图分析游标的四个并发选项:

其次,我们讲解锁和事务并发的那点事

所谓锁即是保证数据安全、数据库的完整性和一致性,例如:每家的门锁,因此,锁可以防止事务的并发问题。我们看一下锁的类型:

为了防止数据的并发性,可以使用锁的粒度即锁的级别,锁定不同类型的资源。

死锁又是怎么产生的呢?

书上的概念:当两个或多个线程之间有循环相关性时,将会产生死锁。其实简单的说就是:当两个或多个事务需要同时使用一组有冲突的锁,而不能将事务继续下去,就会出现死锁。

例如:有两个事务:事务1、事务2。事务1具有Supplier表的排它锁,事务2具有Part表上的排它锁。事务1需要Part表上的锁,无法获得。事务2需要Supplier表上的锁,也无法获得,这样就会出现死锁。只要一方首先释放持有的锁,就不会出现死锁。

如图:

 

最后,我们讲解游标和锁的那点事

游标适用于任何其他SELECT语句的相同事务锁定规则。通过任何SELECT语句获得的事物锁由下述两项控制:

  • 连接的事物隔离级别设置
  • FROM子句中指定的任何锁提示

对于游标和独立的SELECT语句,这些锁都会保持到当前事务结束。

注:SQL Server以显性或隐性事务运行,则这些锁将保持到事务提交或回滚

举两个例子,其所作的锁定基本相同。如下:

/* Example 1 */
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ —设置隔离级别为可重复读
GO
BEGIN TRANSACTION
GO
SELECT * FROM AdventureWorks2008R2.Sales.Store;
GO

/* Example 2 */
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ  —设置隔离级别为可重复读


GO
BEGIN TRANSACTION
GO
DECLARE abc CURSOR STATIC FOR
SELECT * FROM AdventureWorks2008R2.Sales.Store;
GO
OPEN abc
GO

游标、事务并发和锁三者之间的关系,就分析这么多,希望对大家有所帮助。同样,希望大家对菜鸟提出宝贵的意见。

分享到:
评论

相关推荐

    数据库概念的复习总结

    即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。(4)持续性(Durability ):指一个事务一旦提交,它对数据库中数据的改变就应该是永久的。接下来的其他操作或故障...

    SQLServer2008查询性能优化 2/2

    2.9.4 使用大的二级(L2)/三级(L3)缓存 44 2.9.5 运行更高效的控制器/驱动程序 44 2.9.6 不运行不必要的软件 45 2.10 网络瓶颈分析 45 2.10.1 Bytes Total/sec 45 2.10.2 % Net Utilization 46 2.11 网络瓶颈...

    SQLServer2008查询性能优化 1/2

    2.9.4 使用大的二级(L2)/三级(L3)缓存 44 2.9.5 运行更高效的控制器/驱动程序 44 2.9.6 不运行不必要的软件 45 2.10 网络瓶颈分析 45 2.10.1 Bytes Total/sec 45 2.10.2 % Net Utilization 46 2.11 网络瓶颈...

    Oracle11g从入门到精通

    12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户管理 ...

    Oracle11g从入门到精通2

    12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户...

    Oracle.11g.从入门到精通 (1/2)

    12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建...

    Oracle.11g.从入门到精通 (2/2)

    12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建...

    pb技术精髓,不用不要后悔

    <br> * 第一讲: 数据库的事务管理 * 第二讲: 调用Windows的动态链接库 * 第三讲: PowerBuilder面向对象的程序设计 * 第四讲: 并发控制 * 第五讲: DataWindow的打印输出 * 第六讲: ...

    亮剑.NET深入体验与实战精要2

    本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...

    亮剑.NET深入体验与实战精要3

    本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...

    javaSE代码实例

    第16章 多线程——Java中的并发协作 343 16.1 线程的基本知识 343 16.1.1 多线程编程的意义 343 16.1.2 定义自己的线程 344 16.1.3 创建线程对象 345 16.1.4 启动线程 347 16.1.5 同时使用多个线程 ...

Global site tag (gtag.js) - Google Analytics