DDL命令即使失败也会提交事务

时间:2018-07-05 11:03:01

标签: sql database oracle

我运行了以下查询。

insert into emp(id,name) values(1,'ONKAR');

然后我写了

Create table emp(id number(10));

失败,因为emp表已经存在。

然后我跑了

rollback;

然后

select * from emp;

它返回1行。

我知道DML之后的任何DDL命令都会提交数据。但是,为什么即使DDL命令失败也要提交?

1 个答案:

答案 0 :(得分:10)

这是因为Oracle按照the documentation在DDL之前和之后都发出了提交:

  

在以下情况下,Oracle数据库发出隐式COMMIT:

     
      
  • 在语法上有效的数据定义语言(DDL)语句之前,即使该语句导致错误
  •   
  • 在任何没有错误的情况下完成的数据定义语言(DDL)语句之后
  •