Database 版 (精华区)

发信人: mm (绿色的梦), 信区: Database
标  题: 数据库技术讲座(五)-----事务处理(1)
发信站: 紫丁香 (Tue Sep 23 22:16:31 1997)


一 事务处理介绍

    事务是这样一种机制,它确保多个SQL语句被当作单个工作单
元来处理。事务具有以下的作用:
    * 一致性:同时进行的查询和更新彼此不会发生冲突,其他
用户不会看到发生了变化但尚未提交的数据。
    * 可恢复性:一旦系统故障,数据库会自动地完全恢复未完
成的事务。

二 事务与一致性

    事务是完整性的单位,一个事务的执行是把数据库从一个一
致的状态转换成另一个一致的状态。因此,如果事务孤立执行时
是正确的,但如果多个事务并发交错地执行,就可能相互干扰,
造成数据库状态的不一致。在多用户环境中,数据库必须避免同
时进行的查询和更新发生冲突。这一点是很重要的,如果正在被
处理的数据能够在该处理正在运行时被另一用户的修改所改变,
那么该处理结果是不明确的。
    不加控制的并发存取会产生以下几种错误:
    1 丢失修改(lost updates)
    当多个事务并发修改一个数据时,不加控制会得出错误的结
果,一个修改会覆盖掉另一个修改。
    2 读的不可重复性
    当多个事务按某种时间顺序存取若干数据时,如果对并发存
取不加控制,也会产生错误。
    3 脏读(DIRDY DATA),读的不一致性
    4 光标带来的当前值的混乱
    事务在执行过程中它在某个表上的当前查找位置是由光标表
示的。光标指向当前正处理的记录。当处理完该条记录后,则指
向下一条记录。在多个事务并发执行时,某一事务的修改可能产
生负作用,使与这些光标有关的事务出错。
    5 未释放修改造成连锁退出
    一个事务在进行修改操作的过程中可能会发生故障,这时需
要将已做的修改回退(Rollback)。如果在已进行过或已发现错
误尚未复原之前允许其它事务读已做过修改(脏读),则会导致
连锁退出。
    6 一事务在对一表更新时,另外的事务却修改或删除此表的
定义。
    数据库会为每个事务自动地设置适当级别的锁定。对于前面
讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一
表更新时另外的事务却修改或删除此表的定义,数据库都会自动
解决。而另外的三个问题则需要在编程过程中人为地定义事务或
加锁来解决。
--
                _/     _/        _/     _/
               _/_/ _/_/        _/_/ _/_/
              _/  _/ _/        _/  _/ _/
             _/     _/        _/     _/
            _/     _/        _/     _/         

※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: space.hit.edu.c]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.443毫秒