极度郁闷,有一段时间没登陆51了,今天回来竟然把提示问题给弄丢了,猜了半个小时才猜出来。。。。

数据库之事务控制

上一篇 / 下一篇  2010-01-07 08:03:54 / 个人分类:Oracle

事务的由来:

在DBMS中,当多用户同时访问或修改同一数据库表时,可能会造成由于一个用户的行为结果导致另一个用户使用的数据无效的问题。为了解决这个问题,sql中引入了事务、事务控制、并发处理和锁定操作。

事务:

事务是指一个工作单元,该单元可以包含多个步骤来完成所需要的任务。在sql中,通过事务将一系列不可分割的数据库操作做为整体来执行,从而保证了数据库的完整性和有效性。

数据库事务就是包含了一组数据库操作命令的一个操作序列,事务中所有命令作为一个整体向系统提交或撤消操作请求,即数据库命令执行成功或不成功。

事务的特性:

ATOMIC(原子性):要么全部都成功,要么全都不成功。
CONSESTENT(一致性):事务中任何数据变化都符合数据定义的规则。当事务完成时,数据必须处于一致的状态。事务不能让数据存储于不稳定的状态,即通过事务对数据所做的修改不能损坏数据,在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护数据的完整性。
ISOLATED(隔离性):多个事务同时进行,它们之间互相干扰。当事务执行修改数据时,如果任何其他进程正在同时使用相同的数据,则直到该事务成功提交后,对数据的修改才能有效。
DURABLE(持久性):一旦事务引发了变化,事务提交以后,所做的工作就永久被保存下来。即使硬件和应用程序发生错误,也必须保证对数据所做的修改不受影响。

事务的分类:

显示事务:又称拥护自定义事务,是指显示的定义其开始和结束的事务。当使用begintran和commit语句发生显示事务。
隐式事务:是指当前事务或回滚后自动开始事务。该事务需要commit语句或rollback语句回滚或结束当前事务,在回滚后又自动开启一个事务。(oracle中任何一个DML语句都会开启一个事务,直到用户执行commit或rollback操作。)
自动事务是指能够自动执行并且能够自动回滚的事务,该事务中,事务自动提交;当执行过程产生错误的时,则事务被回滚。(1.当执行下一条ddl语句时,即使用户没有执行commit或rollback操作,Oracle系统也会自动提交当前事务,并开始一个新的事务.2.当DML语句开始执行时,Oracle就通过执行Create table开始执行一个事务,而在create table 执行后自动发出cmmit命令)
 
事务控制:

事务控制是指为了确保数据库数据的完整性和有效性,而将一系列不可分割的数据库操作作为整体执行的操作。事务控制只要包括开始事务和终止事务两个操作。
set transaction:用于设置下一个要执行事务属性。
start transaction:表示执行开始事务。
ser constrains:用于设置在当前事务中约束模式。
savepoint:是指在事务中设置的保存点。保存点可以理解为断点,用来标识重新开始事务时的位置。
release savepoint:表示释放保存点。
rollback:表示终止事务
commit:表示提交事务

并发控制:

当多个用户对同一数据进行操作时,就需要对该操作进行并发控制。       

并发操作的问题:

丢失更新:是指多个事务同时操作一行数据时,并且基于最初选定的值被更改时,每个事务都不知道其他事务的存在。最后更新将重写由其他事务所做的更新,这将导致数据丢失的现象的发生。
脏读:是指当第二个事务选择其他事务正在更新时,会发生未确认的相关性问题,第二个事务正在读取的数据还没有确认并且可能被更新此行的事务所更改。
非重复读:非重复读和脏读类似,是指第二个事务多次访问同一行数据而且每次读取不同数据时,会发生不一致的问题。
虚读:是指当对某行执行插入或删除操作,而该行属于某个事务正在读取的范围时,会发生虚读的问题

事务隔离级别

事务隔离级别可以理解为锁定该事务正在以减少其他事务对这些数据库的影响,保证数据的一致性,在多用户系统中,经常出现多个事务同时需要操作某一个数据库中的数据的情况,为了防止事务之间的相互影响,提高数据库数据的安全性和完整性,数据库系统提供了隔离机制

隔离级别:

就是一个事务必须和其他事务隔离的程度

1.未提交读(read uncommitted):未提交读是最低的事务隔离,仅保证不读取物理损坏的数据。
2.提交读(read committed):提交读隔离级别比未提交读隔离级别更高一层,提交读隔离级别是大多数主流数据库的默认隔离级别,其保证了一个事务不会读到另一个并行事务已修改但为提交的数据,避免了"脏读取"的情况发生
3.可重复读(Repeatable Read):可重复读隔离级别保证了一个事务不会修改已经由另一个事务读取但回滚的数据,避免了"脏读取"和"不可重复读取"的情况发生。
4.可串行化(Serializable):可串行化隔离级别是最高的事务隔离等级,是将事务以中顺序的方式连接起来,以防止一个事务影响其他事务

TAG: 事务 数据库

 

评分:0

我来说两句

Open Toolbar