天天看点

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命令提交。