第19章数据库一致性与事务管理 数据库中的数据是每时每刻都有可能发生变化的。但 是这种变化必须是可以接受的和合理的。即数据必须保持一 致性。事务是保证数据一致性的重要手段。本章将从以下几 个方面讲述数据一致性。 什么是数据库一致性和事务 Oracle中的事务 事务的属性和隔离级别 事务的处理原则 通过本章的学习,读者可以对数据一致性有清晰的认 识,并了解Oracle中的事务处理原则
Oracle Oracle
19.1数据一致性和事务 用户对数据库的操作是复杂多变的。这些复杂的动作 可能是一个逻辑整体,如果处理不当极易造成数据不一致。 同属一个逻辑整体的操作应该作为一个事务进行处理,从而 避免出现数据不一致性
19.1.1 Oracle中的数据一致性 数据库是现实世界的反映。例如,一个存储了多家连锁店 铺库存信息的数据库,如果需要进行货物调配,则需要进行数 据更新。从A店调出的货物送至B店,那么A店对应的库存量应 该进行削减,B店库存进行相应增加。在数据库中的实际操作 应该是两条SQL语句,一条语句减少A店库存,另外一条增加 B店库存。但是,数据库有可能拋出这样那样的异常,例如, 第一条语句执行完毕,突然断电,或者第二条语句由于其他原 因(如表本身的约束)而没有执行成功,就造成了数据不符合 实际情况,即实际库存与数据库记录不符。 类似的场景还有很多,但作为存储基础数据的数据库,必 须避免任何犯错的可能,即必须保持数据一致性
A B A B SQL A B
19.1.2 Oracle中的事务 事务是保证数据一致性的重要手段。试图改变数据库 状态的多个动作应该视作一个密不可分的整体。无论其中经 过了多么复杂的操作,该整体执行之前和执行之后,数据库 均可保证一致性。整个逻辑整体即使一个事务。 事务 操作1 数据保持一致性 操作2 操作3 数据保持一致性
数据保持一致性 数据保持一致性 操作1 操作2 操作3 ... 事务
19.2 Oracle中的事务处理 一个事务的生命周期包括,事务开始、事务执行和事务 结束。在Oracle中,并不会显式声明事务的开始,而是由 Oracle自行处理。事务的结束可以利用commit.或者rollback 命令。本节将从以下角度讲述Oracle中的事务处理。 利用Commit命令结束事务 利用Rollback命令结束事务 事务属性和隔离级别
Oracle Oracle commit rollback Oracle Commit Rollback
19.2.1利用commit命令界定事务 事务的开始无需显式声明,在一个会话中,一次事务的 结束便意味着新事务的开始。事务的结束可以利用commit命 令,如示例19-1所示。 【示例19-1】利用commit命令界定事务。 在表warehouse中存储了仓库及库存信息,如下所示。 SQL>select from warehouse;
commit 19-1 19-1 commit warehouse SQL> select * from warehouse;
19.2.2利用rol1back命令界定事务 rollback命令用于回滚事务内的所有数据修改,并结束 事务。在示例19-1中,无论进行了多少次调仓,使用 rollback命令将忽略所有操作。 【示例19-2】利用rollback命令界定事务。 SQL>update warehouse set stock=stock-100 where warehouse_name='A仓'and goods='衬衫'; 1 row updated SQL>update warehouse set stock=stock+100 where warehouse_.name-B仓'and goods='衬衫';
rollback 19-1 rollback 19-2 rollback SQL> update warehouse set stock=stock-100 where warehouse_name='A ' and goods=' '; 1 row updated SQL> update warehouse set stock=stock+100 where warehouse_name='B ' and goods=' ';
19.2.3 Oracle事务的属性和隔离级别 Oracle中,可以设定事务的属性和隔离级别,以保证 事务运行在某种特定环境。因为数据库状态总是在不断进行 变化的,特定的环境有利于事务在一个稳定的状态下工作。 这些属性和隔离级别包括: read only属性; read write属性; serializable隔离级别; read commited隔离级别。 1.read only.属性 2.read write,属性 3.serializable隔离级别 4.read commited隔离级别
Oracle read only read write serializable read commited 1 read only 2 read write 3 serializable 4 read commited
19.3事务处理原则 事务并非Oracle数据库的专利,而是被广泛应用,并 具有统一的处理原则。事务的处理原则包括以下几点: 原子性(Atomicity): 一致性(Consistency): 隔离性(Isolation): 持久性(Durablity):
Oracle Atomicity Consistency Isolation Durablity
19.3.1事务的原子性一Atomicity 原子性是事务的最基本属性。当事务被提交时,所有数据 修改都将被确认;当事务回滚时,所有数据修改都将被忽略。 不能出现部分提交部分忽略的情形。当然,具体的实现细节均 由数据库实现。对于用户来说,只需使用commit/rollback命 令来提交/回滚事务即可
—— commit /rollback /