天天看點

Oracle的事務commit送出問題

1.背景原因

在進行開發的時候,不經常使用oracle,出現oracle在進行insert的時候不會自己進行執行insert 自動commit問題,通過查找發現根本原因。

Oracle中:

DML語言,比如update,delete,insert等修改表中資料的需要commit;

DDL語言,比如create,drop等改變表結構的,就不需要寫commit(因為内部隐藏了commit);

一、DML

DML(data manipulation language)資料操縱語言:

    就是我們最經常用到的 SELECT、UPDATE、INSERT、DELETE。 主要用來對資料庫的資料進行一些操作

二、DDL

DDL(data definition language)資料庫定義語言:

    其實就是我們在建立表的時候用到的一些sql,比如說:CREATE、ALTER、DROP等。DDL主要是用在定義或改變表的結構,資料類型,表之間的連結和限制等初始化工作上

三、DCL

DCL(Data Control Language)資料庫控制語言:

    是用來設定或更改資料庫使用者或角色權限的語句,包括(grant,deny,revoke等)語句

DDL 資料定義語言:

create table 建立表

alter table 修改表

drop table 删除表

truncate table 删除表中所有行

create index 建立索引

drop index 删除索引

當執行DDL語句時,在每一條語句前後,oracle都将送出目前的事務。如果使用者使用insert指令将記錄插入到資料庫後,執行了一條DDL語句(如create

table),此時來自insert指令的資料将被送出到資料庫。當DDL語句執行完成時,DDL語句會被自動送出,不能復原。

DML 資料操作語言:

insert 将記錄插入到資料庫

update 修改資料庫的記錄

delete 删除資料庫的記錄

當執行DML指令如果沒有送出,将不會被其他會話看到。除非在DML指令之後執行了DDL指令或DCL指令,或使用者退出會話,或終止執行個體,此時系統會自動發出commit指令,使未送出的DML指令送出。