码迷,mamicode.com
首页 > 数据库 > 详细

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别

时间:2014-10-11 01:52:04      阅读:399      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   ar   数据   sp   div   


  1. 事务提交过程

bubuko.com,布布扣

  1. 事务

基本概念

概念:一个或者多个DML语言组成

特点:要么都成功,要么都失败

事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作,

否则出现:脏读  不可重复读  幻读

Oracle默认情况下,事务是打开的

commit案例:

SQL> create table t1(tid int,tname varchar2(20));

 

表已创建。

 

SQL> select * from tab;

 

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

BONUS                          TABLE

DEPT                           TABLE

EMP                            TABLE

EMP10                          TABLE

SALGRADE                       TABLE

T1                             TABLE

 

已选择6行。

 

SQL> insert into t1(tid,tname) values(1,‘aaaaa‘);

 

已创建 1 行。

 

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

 

SQL> commit;

 

提交完成。

 

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

 

SQL> rollback;

 

回退已完成。

 

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

 

SQL>

bubuko.com,布布扣

bubuko.com,布布扣

rollback案例:

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

 

SQL> insert into t1(tid,tname) values(2,‘bbb‘);

 

已创建 1 行。

 

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

         2 bbb

 

SQL> rollback;

 

回退已完成。

 

SQL> select * from t1;

       TID TNAME

---------- --------------------

         1 aaaaa

SQL>

bubuko.com,布布扣

 

  1. Oracle中的事务生命周期

1.事务的起始标志 DML语言(oracle默认事务是打开的)

2.事务的结束标志

提交

显式提交commit

隐式提交

执行DDL语句

Eg:执行create table的时候还有1个隐式的功能

提交之前没有提交的DML语句(insert update

正常退出

回滚

显式rollback

隐式:掉电/宕机/非正常退出,这几者等价于系统出错了

4 保存点savepoint

案例:

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

 

SQL> insert into t1(tid,tname) values(2,‘bbb‘);

 

已创建 1 行。

 

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

         2 bbb

 

SQL> rollback;

 

回退已完成。

 

SQL> select * from t1;

 

       TID TNAME

---------- --------------------

         1 aaaaa

 

SQL>

bubuko.com,布布扣

总结:最后一条insert语句没有插入进去,回滚到了指定的保存点

  1. 数据库的隔离级别

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题

脏读:对于两个事务T1,T2T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚。T1读取的内容就是临时且无效的。

不可重复读:对于两个事物T1,T2T1读取了一个字段,然后T2更新了该字段,之后T1再次读取同一个字段,值就不同了。

幻读:对于两个事务T1T2T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表,就会多出几行。

数据库事务的隔离性:数据库系统必须具有隔离并发运行多个事务的能力,使它们不会相互影响,避免各种并发问题。

一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱

数据库提供4中事务隔离级别:sql99

bubuko.com,布布扣

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED

另外还支持一种隔离级别:read-only

Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ

 

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别

标签:style   blog   http   color   io   ar   数据   sp   div   

原文地址:http://blog.csdn.net/tototuzuoquan/article/details/39977293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!