《数据库原理》并发控制教学案例设计

2017-12-09 23:20王珏徐静吴琼金莉罗海艳
科技视界 2017年23期
关键词:数据库原理

王珏+徐静+吴琼+金莉+罗海艳

【摘 要】并发控制是数据库管理系统重要的组成部分。允许多个用户同时对数据库进行访问,有可能出现多个用户同时存取同一数据的情况。如果对其不加控制就有可能破坏数据库的一致性,出现丢失修改、不可重复读以及读取脏数据的情况,所以需要对数据库进行并发控制。封锁是实现并发控制的一项重要技术。本文设计几个教学案例,帮助学生更好地理解封锁机制,从而为掌握数据库的并发控制打下坚实基础。

【关键词】并发控制技术;教学案例设计

中图分类号: TP311.13-4 文献标识码: A 文章编号: 2095-2457(2017)23-0054-002

【Abstract】Concurrency control is an important part of the database management system.The database allows multiple users to use the database system at the same time. In this case,multiple users possibly access the same data currently. There may be the situations of lost update,not repeatable and read dirty data,if there is no control. So concurrency control of the database is very important.Blocking is a key technique for concurrency control.This article designed several case studies to help students understand the block mechanism better. This will lay a solid foundation for students to master the concurrency control of the database.

【Key words】Concurrent control technology;Teaching case design

0 引言

数据库具有高共享性,即多个用户可以同时使用数据库,这样在数据库系统中,同一时刻可以并发运行多个事务。根据系统中处理机的个数,并发执行有两种方式,它们分为交叉并发方式和同时并发方式。交叉并发方式是指在单处理机系统中,多个事务轮流交叉运行,多个事务并没有真正并行执行,但这种执行方式减少了处理机的空闲时间,从而提高系统效率。同时并发方式是指在多个处理机系统中,每个事务运行在一个处理机上,多个事务同时运行在多个处理机上,从而实现多个事务真正的并行运行。本文中数据库系统并发控制技术是以单处理机系统为基础。当多个用户同时访问数据库就可能出现多个事务同时存取或存储数据的情况。若不对并发操作加以控制就会破坏事务的一致性从而存取或存储不正确的数据,因此并发控制是数据库管理系统必不可少的组成部分。封锁机制是并发控制的重要技术,本文基于SQL Server 2012设计几个教学案例帮助学生更好地理解锁,从而掌握并发控制机制。

1 SQL server 2012并发控制技术

SQL Sever是企业级产品,一个重要功能是要支持多用户的并发操作,这些操作有读取数据及修改数据,如果一个用户要读取正在被其他用户修改的数据,或者一个用户要修改其他用户正在修改的数据,就需要某种机制规范这些操作,使得在保证数据一致性的情况下,又不会对并发性产生较大影响。

SQL Server主要通过锁的机制实现对并发操作的规范,在访问资源时,根据资源类型和操作类型,要先在访问资源上获得合适的锁,才能完成资源访问操作。一个操作如何使用锁,与操作类型、资源类型、是否使用索引以及事务隔离级别有很大关系。数据库中常用的锁有共享锁、排他锁。

共享锁(S锁) 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排他锁(X锁) 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

2 教学案例设计

本小节设计几个教学案例帮助学生更好地理解解锁的概念。教学案例采用SQL Server最常用的隔离级别read committed。数据库stuDB中有Student表及Course表,其中Student表的属性包括学号(sno)、姓名(sname)、性别(ssex)、年龄(sage)、所在系(sdept)。Course表有属性课程号(cno)、课程名(cname)、先行课号(cpno)、学分(ccredit)。

Student Course

啟动两个连接,首先运行事务A,紧接着运行事务B。2.1 排它锁实例

事务A对Student表200215121学生记录的年龄进行修改,故对其加X锁,并将操作延时30秒。事务B对200215121学生记录进行读操作,故对其加S锁。S锁和X锁不相容,所以要等事务A结束,释放X锁后,事务B才能执行。

2.2 共享锁实例

事务A读取Student表中200215121学生记录,故对其加S锁,并将操作延时30秒。事务B对200215121学生记录的学号和姓名进行读操作,故对其加S锁。S锁和S锁相容,所以事务B不必等到事务A完成即可执行。

2.3 死锁实例

事务A进行两个操作,第一个操作对200215121学生记录的年龄进行修改操作,故对其加X锁,延时10秒,进行第二个操作对1号课程的学分进行修改,对其加X锁。事务B进行两个操作,第一操作对1号课程的学分进行修改,对其加X锁,延时10秒,进行第二个操作,对学生表中200215121学生记录的年龄进行修改操作,对其加X锁。事务A执行后,立刻执行事务B,事务A获得对学生200215121记录的X锁,事务B获得对1号课程记录的X锁,事务A申请对1号课程记录加X锁,事务B申请对学生200215121学生记录加X锁。由于X锁互不相容,事务A等待事务B释放1号课程记录的X锁,事务B等待事务A释放200215121学生记录上的X锁,形成了事务A和事务B互相等待对方释放资源上的X锁的情况,使得事务A和事务B形成相互等待的情况,事务A和事务B都无法完成,从而形成死锁。

3 结束语

本文基于SQL Server 2012设计了几个教学案例来加深学生对共享锁(S锁)及排他锁(X锁)的理解。这些教学案例很好地诠释了对某一数据对象在何种操作下加何种类型的锁,并进一步熟悉锁的相容矩阵。最后一个教学案例表明,使用封锁机制对并发操作进行控制,会带来死锁问题。这些教学案例能够帮助学生深入理解封锁机制,为进一步学习并发控制打下良好的基础。

【参考文献】

[1]王珊,萨师煊.数据库系统概论[M].第四版,北京:高等教育出版社,2006.

[2]李红.数据库原理及应用[M].北京:高等教育出版社,2003.

[3]王珊,李红.数据库系统原理教程[M].北京:清华大学出版社,1998.

[4]郑阿奇.SQL Server实用教程(SQL Server 2012版)[M].第四版,电子工业出版社,2015.

[5]吴晓刚.基于项目驱动的数据库课程自主探究式教学模式[J].计算机教育,2008(22).endprint

猜你喜欢
数据库原理
数据库原理及应用课程教学改革与实践
基于《数据库原理》课程网站前台设计与开发
基于多维立体化模式的数据库原理教学改革与实践
基于海洋特色的数据库原理案例教学设计与实践