程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 4.事務提交過程,事務基本概念,Oracle中的事務生命周期,保存點savepoint,數據庫的隔離級別

4.事務提交過程,事務基本概念,Oracle中的事務生命周期,保存點savepoint,數據庫的隔離級別

編輯:Oracle教程

4.事務提交過程,事務基本概念,Oracle中的事務生命周期,保存點savepoint,數據庫的隔離級別


事務提交過程

\

事務

基本概念

概念:一個或者多個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>

\

\

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>

\

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>

\

總結:最後一條insert語句沒有插入進去,回滾到了指定的保存點

數據庫的隔離級別

對於同時運行的多個事務,當這些事務訪問數據庫中相同的數據時,如果沒有采取必要的隔離機制,就會導致各種並發問題

髒讀:對於兩個事務T1,T2,T1讀取了已經被T2更新但還沒有被提交的字段之後,若T2回滾。T1讀取的內容就是臨時且無效的。

不可重復讀:對於兩個事物T1,T2,T1讀取了一個字段,然後T2更新了該字段,之後T1再次讀取同一個字段,值就不同了。

幻讀:對於兩個事務T1,T2,T1從一個表中讀取了一個字段,然後T2在該表中插入了一些新的行。之後,如果T1再次讀取同一個表,就會多出幾行。

數據庫事務的隔離性:數據庫系統必須具有隔離並發運行多個事務的能力,使它們不會相互影響,避免各種並發問題。

一個事務與其他事務隔離的程度稱為隔離級別. 數據庫規定了多種事務隔離級別, 不同隔離級別對應不同的干擾程度, 隔離級別越高, 數據一致性就越好, 但並發性越弱

數據庫提供4中事務隔離級別:sql99

\

Oracle 支持的 2 種事務隔離級別:READ COMMITED, SERIALIZABLE. Oracle 默認的事務隔離級別為: READ COMMITED

另外還支持一種隔離級別:read-only

Mysql 支持 4 中事務隔離級別. Mysql 默認的事務隔離級別為: REPEATABLE READ

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved