天天看點

oracle語句開啟事物,Oracle事務控制和OracleDDL語句-Oracle

Oracle 事務控制

會隐式的執行Commit動作: 1、資料定義語句(DDL)被執行的時候,比如建立一張表: create table 2、資料控制語句(DML)被執行的時候,比如賦權 或者 DENY) 3、正常退出 iSQL*Plus 或者PLSQL DEVELOPER, 而沒有顯式的執行 COMMIT 或者 ROLLBACK 語句 。

會隐式執行Rollback 動作: 1、非正常退出 SQL*Plus , PLSQL DEVELOPER, 或者發生 系統錯誤。 在資料已經被更改,但沒有Commit前 ,被更改記錄處于被鎖定狀态,其他使用者無法進行更改;

當有使用者修改資料時,Oracle先把那部分原始資料備份到復原段,在Commit之前,其他Session使用者讀到的這部分資料是復原段上的; 在送出之後,復原段被釋放。

鎖的概念: Oracle中的鎖的主要作用就是:防止并發事務對相同的資源(所謂資源是指 表、行、共享的資料結構、 資料字典行等)進行更改的時候,互相破壞。 鎖有既有隐式的,也有顯式的; 但某使用者對某一批資料進行更改,而未送出之前 Oracle會隐式的進行加鎖;

當然使用者也可以顯式的加鎖,比如:select * from TableA for update NoWait

Oracle的“讀一緻性”概念是指: 1、在任何時候,確定提供資料的一緻性視圖。 2、一個使用者對資料的更改不會影響另一個使用者對資料的更改。 3、“讀一緻性” 確定在同一時刻: 3.1 讀資料的人不需要等待寫資料的人 3.2 寫資料的人不需要等待讀資料的人 實作方法:當有使用者修改資料時,Oracle先把那部分原始資料備份到復原段,在Commit之前,其他Session使用者讀到的這 部分資料是復原段上的; 在送出之後,復原段被釋放。

事務參數: Oracle事務可以顯示的開始,開始一個事務的時候可以設定不同的參數,Oracle提 了兩種通常的事務:隻讀事務和讀寫事務。隻讀事務規定,查詢到資料以及該事務中 的查詢将不受發生在 資料庫中其他任何事務的影響,進而保證事務級别資料讀取的一 緻性。而讀寫事務隻是提供語句級别讀取一緻性. 在顯示執行一個事務的時候,就是在事務開始之前使用 SET TRANSACTION來設定 具體的事務參數,SET TRANSACTION使用的文法如下所示。

SET TRANSACTION {{READ {ONLY | WRITE} | ISOLATION LEVEL {SERIALIZABLE | READ COMMITTED} | USE ROLLBACK SEGMENT rollback_segment} [NAME ‘test’]| NAME ‘test’}

具體可以設定的參數如下所示: READ ONLY:提供事務級别資料讀取的一 ,設定隻讀事務; READ WRITE:提供語句級别資料讀取的一緻性,設定讀寫事務; USE ROLLBACK SEGMENT:針對目前事務指定合适的復原段; ISOLATION LEVEL:設定事務的隔離級别;

1.

隻讀事務是所有事務的預設模式,對于這樣的事務不需要指定復原段,因為在隻讀 事務中不允許進行 DML操作,隻有 SELECT INTO,OPEN,FETCH,CLOSE, LOCK TABLE,COMMIT和 ROLLBACK這樣的子句可以在隻讀事務中使用。 隻讀事務保證在事務級别的資料讀取一緻性,除了可以讀取在目前隻讀事務中對數 據的更新之外,隻讀事務中的查詢資料不會受到任何其他事務的影響。

示例: 1、首先打開一個 SQL視窗,開始一個 SESSION,在目前的 SESSION中我們首 先顯示的開始一個隻讀事務 BEGIN COMMIT; –確定開始一個新的事務 SET TRANSACTION READ ONLY; –設定隻讀事務 END;

2、我們

再打開另一個 SQL視窗,開啟另一個 SESSION,在這個事務中我們對表 中出入一條資料 BEGIN INSERT INTO cux_cursor_test (person_id, person_name, age) VALUES (103, ‘Test’, 40); COMMIT; END;

3、我們再次在隻讀事務中執行一次查詢,隻讀事務依然是存在的,因為我們還 沒有 commit或者 rollback來終止事務,查詢的結果如下,可見對新插入的數 據沒有查詢出來,保證在目前事務中資料讀取的一緻性。 4、在隻讀事務中執行了 DML操作,執行語句如下所示,會報錯資訊。 BEGIN COMMIT; –確定開始一個新的事務 SET TRANSACTION READ ONLY; –設定隻讀事務 DELETE FROM cux_cursor_test; END;

2.

讀寫事務提供語句級别資料的讀寫一緻 在讀寫事務中可以使用 DML語句處理 資料,可以讀取到其他事務已經送出的資料更 。同時也可以指定目前事務所要使 用的復原段,因為 Oracle是通過復原段來撤銷資料的,有時候資料量太大,復原 段很小的話就會導緻撤銷操作出現異常。 示例: BEGIN COMMIT; –確定開始一個新的事務 SET TRANSACTION READ WRITE; –設定讀寫事務 END; 和上面相同的操作,這時候如果執行插入操作,在目前事務的session是可以查詢到另外的一個事務對資料進行的修改。

顯示指定事務的隔離級别,通過 SET TRANSACTION ISOLATION LEVEL 可以 實作,隔離級别設定了事務與事務時間的隔離程式。其實事務的隔離程式和資料庫 并發性是沖突的,事務的隔離程式越高,資料庫的并發性就越差。

Oracle DDL語句

DDL:資料定義語句,包括建立表,修改表,删除表,删除表中所有行(turncate),建立和删除索引

新增列的文法: ALTER TABLE table1 ADD(column datatype [DEFAULT expr]); –預設加在最後一個字段,沒辦法指定加在哪一行之後 更改列文法: ALTER TABLE table1 MODIFY (column datatype [DEFAULT expr]); 删除列文法: ALTER TABLE table1 DROP (column); 更改表名稱: rename ldtablename to newtableName; 表被删除後,任何依賴于這張表的視圖、Package等資料庫對象都自動變為無效:

删除表中的限制文法: ALTER TABLE employees DROP CONSTRAINT emp_manager_fk;

使表中對列的限制生效或者失效的文法

ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk CASCADE;

ALTER TABLE employees ENABLE CONSTRAINT emp_emp_id_pk;

删除表中的列時候,如果該列有限制條件,則無法正常删除。還要現删除它上面的限制條件,可以使用Cascading Constraints

文法: ALTER TABLE test1 DROP (column1) CASCADE CONSTRAINTS;

檢視表中有哪些限制條件: SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = ‘EMPLOYEES’;