事务提交过程
事务
基本概念 |
概念:一个或者多个DML语言组成 特点:要么都成功。要么都失败 事务的隔离性:多个client同一时候操作数据库的时候。要隔离它们的操作, 否则出现:脏读 |
Oracle默认情况下,事务是打开的 |
commit案例: SQL> create table t1(tid int,tname varchar2(20)); 表已创建。 SQL> select * from tab; TNAME ------------------------------ ------- ---------- BONUS DEPT EMP EMP10 SALGRADE T1 已选择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> |
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> watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""> |
Oracle中的事务生命周期
1.事务的起始标志 DML语言(oracle默认事务是打开的) |
|||
2.事务的结束标志 |
提交 |
显式提交commit |
|
隐式提交 |
运行DDL语句 Eg:运行create table的时候还有1个隐式的功能 提交之前没有提交的DML语句(insert |
||
正常退出 |
|||
回滚 |
显式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> |
总结:最后一条insert语句没有插入进去。回滚到了指定的保存点 |
数据库的隔离级别
对于同一时候执行的多个事务,当这些事务訪问数据库中同样的数据时,假设没有採取必要的隔离机制,就会导致各种并发问题 |
脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚。T1读取的内容就是暂时且无效的。 |
不可反复读:对于两个事物T1,T2,T1读取了一个字段。然后T2更新了该字段。之后T1再次读取同一个字段,值就不同了。 |
|
幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,假设T1再次读取同一个表。就会多出几行。 |
|
数据库事务的隔离性:数据库系统必须具有隔离并发执行多个事务的能力,使它们不会相互影响,避免各种并发问题。 |
|
一个事务与其它事务隔离的程度称为隔离级别. |
|
数据库提供4中事务隔离级别:sql99 |
|
Oracle 另外还支持一种隔离级别:read-only |
|
Mysql |
版权声明:本文博客原创文章。博客,未经同意,不得转载。