`

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

阅读更多

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

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

事务是为完成特定任务,将一条或多条的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

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

分享到:
评论

相关推荐

    db2_查询锁方法

    这些命令可以帮助我们查看到当前存在的所有锁的状态,包括但不限于锁的类型、拥有者等信息。 #### 方法二:使用`SNAPSHOT_LOCK`函数 如果需要获取特定数据库的锁信息,可以使用`SNAPSHOT_LOCK`函数。示例如下: `...

    DB2基础教程第二部分

    **结束语:** 通过以上知识点的详细解析,可以看出DB2基础教程第二部分深入涵盖了数据库并行性、静态和动态SQL编程、锁定机制、游标锁定等多个核心概念,为DB2数据库的初学者、准备参加DB2考试认证的读者以及数据库...

    mysql面试题 mysql面试题mysql面试题

    三者之间的主要区别是: * drop命令删除整个表,包括表结构和数据。 * delete命令删除表中的记录,但保留表结构。 * truncate命令删除表中的所有记录,并重置自增id。 本文总结了MySQL面试题中的知识点,包括索引...

    sql常见面试题目经典精选汇总大全.docx

    本资源摘要信息涵盖了 SQL 面试中常见的问题和答案,涵盖了触发器、存储过程、索引、内存泄漏、事务、锁、视图、游标等多个方面的知识点。 触发器 触发器是一种特殊的存储过程,通过事件来触发执行,可以强化约束...

    数据库原理试卷.doc

    1. 数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是:DBS包括DB和DBMS。数据库系统(DBS)是由数据库(DB)和数据库管理系统(DBMS)以及相关的软件和硬件组成的整体,用于管理和处理数据。 2. 在...

    sqlserver试题含答案.doc

    锁:在所以的 DBMS 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。 知识点:本题考察了...

    数据库面试宝典面试宝典

    锁是保证事务并发执行时,能够维护数据一致性和完整性的机制。锁可以防止数据在事务执行过程中被其他事务修改,直到当前事务处理完成。 8. 事务的隔离级别 事务的隔离级别定义了事务并发执行时的行为。主要有四个...

    历年考试整理1

    封锁法的基本思路是在事务对数据进行操作前先加锁,只有当持有锁的事务释放锁后,其他事务才能获取并操作该数据,这样避免了并发冲突。然而,封锁法可能导致死锁(事务间的循环等待),这是需要解决的关键问题。 ...

    SQL数据库复习题.pdf

    10. **意向锁**:意向锁是一种多粒度锁定机制,包括意向共享锁(IS)和意向排他锁(IX),用于协调多个事务对数据的并发访问。 **单项选择题**涉及了数据库基础概念,如数据库、数据库系统、数据模型、数据完整性、...

    数据库原理与应用试题及答案.pdf

    - 三者之间的关系是DBS包括DB和DBMS。 2. **事务与并发控制**: - 读脏数据是事务读取了另一个事务未提交的数据,这可能导致数据不一致。 - 加锁协议中的“先申请先服务”原则有助于避免死锁,但不能防止活锁。 ...

    oracle学习笔记

    总之,Oracle的学习涵盖了数据库架构、SQL语句处理、PL/SQL编程、事务管理、锁机制、游标操作、动态SQL、子程序、包和触发器等多个方面,深入理解这些概念对于成为一位熟练的Oracle数据库管理员至关重要。

    sql server资料

    封锁机制,如X锁(排它锁)和S锁(共享锁),用于解决并发操作可能导致的问题,防止数据不一致性。死锁是多个事务相互等待对方释放资源导致的僵局,通过两段锁协议和显式与隐式封锁来预防。 数据完整性和安全性是...

    计算机编程竞赛题库.pdf

    12. 数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是DBS包括DB和DBMS。 13. 使用OPEN语句打开游标后,游标指针指向查询结果的第一行。 14. 并发控制的主要方法是采用封锁机制。 15. 事务的原子...

    oracle培训基础教程共十章

    我们将学习Oracle的事务概念、提交、回滚,以及锁定机制,如行级锁、表级锁,以确保数据的一致性和完整性。 第十章:数据库性能优化 最后,我们将讨论Oracle的性能优化策略,包括索引优化、SQL调优、物理数据库设计...

    Oracle面试资料

    - 隔离性:并发事务之间互不影响,如同串行执行。 - 持久性:事务完成后,其影响是永久的。 11. **游标管理** - 使用全局变量`@@FETCH_STATUS`检查是否到达结果集末尾,值不为0表示结束或出错。 12. **触发器...

    Oracle OCP试题分析

    三、事务与并发控制 在多用户环境下,事务处理和并发控制至关重要。考生需要掌握SQL中的COMMIT、ROLLBACK和SAVEPOINT语句,理解ACID(原子性、一致性、隔离性和持久性)特性,以及Oracle提供的锁定机制,如行级锁、...

    MySQL面试题目汇总.doc

    锁:在所以的 DBMS 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。 7. 视图和游标 视图...

    ORACLE数据库学习总结

    以上内容覆盖了Oracle数据库的基础知识、SQL语言操作、内置函数、PL/SQL编程、游标、视图、存储过程、触发器、事务与锁、备份与恢复等多个方面的知识点,旨在帮助读者全面理解和掌握Oracle数据库的关键技术。

Global site tag (gtag.js) - Google Analytics