APP下载

数据库事务及实现方案小议

2011-12-31孙宜贵许速徐振强

计算机教育 2011年14期

  摘要:事务是数据库相关课程的一个重要知识点。针对目前教学中普遍存在的问题,结合案例详细介绍几种数据库事务的常见实现方案,给出不同方案的综合评价和应用建议。实际教学效果证明了教学方法的有效性。
  关键词:数据库;事务;实践
  
  数据库原理及应用是计算机专业的核心专业课程,该类课程系统、完整地讲述了当前数据库技术的基本原理,并结合具体的数据库管理系统(DBMS)和应用程序集成开发环境(IDE)介绍原理的应用过程。课程的教学目的是让学生对数据库系统的基本概念和原理有较全面的了解,同时具备使用数据库管理系统软件和开发数据库应用系统的能力。
  事务处理是在数据处理时经常遇到的。通常情况下,对于一个数据库驱动的应用系统,其数据库部分通常包含多个数据表,表之间的关系支撑着整个系统的数据逻辑结构,在系统设计时必须考虑数据库完整性问题,一般采用事务实现。根据实际情况选择合适的事务实现方案是在实际应用开发中的一项重要工作,要求开发者既要具有广泛而深入的数据库原理和系统实现知识,又要有扎实的应用设计能力,熟悉操作系统和有关软硬件环境。目前,虽然有一些数据库教材[1-2]及相关研究文献[3-4]涉及到事务处理,但是,存在的普遍问题是没有明确地从实际应用中讨论事务及其实现方案,缺乏综合分析和应用指导,不利于学生实践能力的提高。
  笔者结合多年数据库相关课程教学实践和项目开发经验,以SQL Server和.NET平台为例说明事务实现的教学方法。首先给出基本概念和案例,然后介绍不同的事务实现方案,并进行综合分析,最后给出实践中事务实现的方案选择建议。
  1概念及案例
  1.1基本概念
  所谓事务[1]是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID特性。
  根据提交方式的不同,事务分为隐式事务和显示事务。其中隐式事务由系统提交,又称自动提交事务;显示事务由用户编程提交。
  1.2案例说明
  为方便起见,本文使用经典的银行转账案例来介绍,即在A账户向B账户转账(金额为m)时,首先在事务开始时判断A账户余额是否满足要求,如果满足要求,则从A账户余额中扣除m,同时给B账户余额增加m;否则,回滚事务。同时假定A账户与B账户属于同一银行。相关表结构如表1和表2所示。
  2数据库事务常见实现方案
  根据创建和管理事务的不同方式,数据库事务分为SQL事务和.NET事务两种[5]。
  2.1SQL事务
  SQL事务是指使用SQL代码创建和管理的事务,运行在存储过程和触发器等数据库对象中,该方案将事务处理的任务交给SQL Server服务器完成。
  1) 存储过程方式。
  由于具有效率高、减少网络流量等多方面优点,存储过程在工程项目中被广泛使用。在存储过程中实现事务时,必须以begin transaction命令开始,并以commit或rollback命令结束。例如,转账存储过程设计如下:
  create procedure sp_TransAcnt
  @FromAIDchar(