[ Fs422.CoM]        热烈庆祝风沙电脑技术网站今天开张,做了一年的垃圾站,决定做一个对自己有帮助的站,或许也能帮到你,谢谢你的光临!!!如果有什么问题,可以点此给我留言------风少 2008.7.31
返回首页
当前位置: 首页 > SQL > SQL案例学习 > 浏览正文

事务的使用

时间:2009年05月06日来源:本站原创 作者:hn1688 点击:
一.事务的概念 所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元。 二.事务的特点 在多用户DBMS中,“事务”是个十分重要的概念。它是保持数据一致性及可恢复性的基本工作单位。事务的主要特点是:    一致性:它保证并发用户读取数据的一致性。    隔离性:事务内部的操作及使用的数据对并发的其他事务是隔离的。    可恢复性:DBMS利用事务日志能对事务进行自动恢复。
 一.事务的概念
    所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元。
    二.事务的特点
    在多用户DBMS中,“事务”是个十分重要的概念。它是保持数据一致性及可恢复性的基本工作单位。事务的主要特点是:
   一致性:它保证并发用户读取数据的一致性。
   隔离性:事务内部的操作及使用的数据对并发的其他事务是隔离的。
   可恢复性:DBMS利用事务日志能对事务进行自动恢复。
    三.事务的管理
在SQL Server中,对事务的管理包含三个方面:
    事务控制语句:控制事务执行的语句。包括将一系列操作定义为一个工作单元来处理。
    锁机制:封锁正被一个事务修改的数据,防止其他用户访问到“不一致”的数据。
    事务日志:使事务具有可恢复性。
为了尽可能避免死锁的出现,应注意:
    1、在所有的事务中都按同一顺序来访问各个表。尽可能利用存储过程来完成一个事务,以保证对各表的访问次序都是一致的。
    2、事务应该尽量小且应尽快提交。
    3、避免人工输入操作出现在事务中。
    4、避免并发地执行许多像INSERT、UPDATE、DELETE这类数据修改语句
    四.事务控制语句
在SQL Server中,对事务的管理是通过事务控制语句和几个全局变量结合起来实现的,具体语语句如下:

    SAVE TRAN:后跟保存点名,表示设置保存点
    BEGIN TRAN [tran_name]:标识一个用户定义的事务的开始。tran_name为事务的名字,标识一个事务开始。
    COMMIT TRAN [tran_name]:表示提交事务中的一切操作,结束一个用户定义的事务。使得对数据库的改变生效。
    ROLLBACK TRAN [tran_name|save_name]:回退一个事务到事务的开头或一个保存点。表示要撤消该事务已做的操作,回滚到事务开始前或保存点前的状态。
    SAVE TRAN save_name:在事务中设置一个保存点。它可以使一个事务内的部分操作回退。
    COMMIT TRAN
    / *提交A组语句,且若未回退B组语句则提交B组语句* /

    在事务中不能包含的语句

  注意,事务中不能包含如下语句:

      CREATE DATABASE
      ALTER DATABASE
      BACKUP LOG
      DROP DATABASE
      RECONFIGURE
      RESTORE DATABASE
      RESTORE LOG
      UPDATE STATISTICS

    五.事务使用示例

  事务管理对维护数据库数据的一致性具有非常重要意义。下面,我们针对本书教学数据库,举一个事务处理的简单例子。要求将course数据表中“C语言”课程的学分减去2分,加到“数据库原理”这门课上(使总的学分数不变)。
程序代码如下:

USE teachdb
GO
DECLARE @num int
BEGIN TRANSACTION
UPDATE course SET c_score=c_score-2 WHERE c_name='C语言'
SET @num=@@ROWCOUNT
IF @num=0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
UPDATE course SET c_score=c_score+2 WHERE c_name='数据库应用'
/* 这里我们故意将“数据库原理”写作“数据库应用”,使修改不能完成。*/
SET @num=@@ROWCOUNT
IF @num=0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
COMMIT TRANSACTION

  程序运行结果如下图所示。由于我们将“数据库原理”改成“数据库应用”,而course表中无“数据库应用”对应的记录,所以,操作不成功。当我们通过查询分析器中的“对象浏览器”打开course表查看其中的数据,可知“C语言”和“数据库原理”这两门课的学分没有改变(事实上“C语言”课的学分变化后被回滚取消了)。

顶一下
()
%
踩一下
()
%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
推荐内容
  • 修改、删除及查看存储过程

    创建存储过程之后,可以通过企业管理器或在查询分析器中执行Transact-SQL语言的ALTER P

  • 创建及使用存储过程

    用企业管理器创建存储过程stu_proc1,要求能从学生表查询学号为102的学生信息。在企业管理器中

  • SQL存储过程

    在大型的数据库系统中,很多情况下,许多代码被重复使用多次,每次都输入相同的代码不但繁琐,更由于在客户

  • 服务器角色及应用程序角色

    前面我们已经介绍了数据库角色的概念和操作,数据库角色中可以包括用户以及其它的数据库角色。如下图所示,

  • 数据库用户帐户及权限管理

    1.登录帐号与用户帐号当用户通过身份验证,以某个登录帐号连接到SQL Server以后,还必须取得相

  • SQL Server 2000 登录认证

    SQL Server数据库系统通常运行在基于NT构架的Windows 2000上,而Windows

  • SQL Server 2000 系统安全机制

    SQL Server 作为一个网络数据库管理系统,具有完备的安全机制,能够确保数据库中的信息不被非法

  • 事务的使用

    一.事务的概念 所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被

  • 修改和删除触发器

    若要修改触发器的定义,可以使用Alter Trigger语句来完成,也可以使用企业管理器来完成这个任

  • 创建触发器

    触发器是一类特殊的存储过程,其特殊性在于它并不需要由用户来直接调用,而是在对表或视图发出Insert