`

数据库中的事务

 
阅读更多

一、事务(Transaction)是由一系列相关的SQL语句组成的最小逻辑工作单元。Oracle系统以事务为单位来处理数据,用以保证数据的一致性。对于事务中的每一个操作,要么全部完成,要么全部不执行。

二、事务的特性?

1、原子性:事务是原子的,也就是说一个事务中包含的所有SQL操作都是一个不可分割的工作单元。

2、一致性:事务必须保持数据库的状态保持一致,也就是说事务开始的时候,数据库的状态是一致的;在事务结束时,数据库的状态也应该是一致的。

3、隔离性:多个事务可以独立运行,而不会互相影响。

4、持久性:一旦事务被提交以后,对数据库的修改会被永久的保存下来,即使运行数据库软件的机器后来崩溃也是如此。

三、什么是数据库的并发?

     数据库软件支持同时多个用户与数据库进行交互,每个用户都可以同时运行自己的事务,这种事务就是并发事务。

四、事务的隔离级别

下面例子,其中两个并发的事务T1和T2正在访问相同的行,这个例子可以展示出事务处理中可能存在的3中问题。

1、幻像读取:事务T1读取一条指定where子句所返回的结果集。然而事务T2新插入了一行记录,而这行记录正好满足事务T1所使用的查询条件。然后T1又使用相同的查询条件再此对表进行检索,但是却看到了事务T2刚刚说插入的那条数据,而这条刚刚插入的数据就称为“幻像”。

2、不可重复读取:事务T1读取了一条记录,紧接着事务T2又对事务T1读取的那条数据做了修改,然后事务T1又读取了这条记录,发现和刚才读取的数据内容不一样了。这种现象成为"不可重复读"。

3、脏读:事务T1更新了一条记录的内容,但是并没有提交所做的修改。而事务T2读取了更新后的行,然后事务T1又做了回滚操作,取消了修改。这时候发现事务T2所读取的数据无效了(也称为脏数据)。因为T2在读取这行数据的时候,T1并没有提交事务。

为了处理这些可能出现的问题,数据库实现了不同级别的事务隔离性,以防止事务的互相影响。

1、read uncommitted 幻像读、不可重读读和脏读都允许。

2、read committed 允许幻像读和不可重复读,但是不允许脏读。

3、repeaable read 允许幻像读,不允许不可重复读和脏读。

4、serializable 幻像读、不可重读度和脏读都不允许。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics