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



我运行了下面的查询。

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

然后我写了

Create table emp(id number(10));

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

然后我跑了

rollback;

然后

select * from emp;

它返回 1 行。

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

这是因为 Oracle 在 DDL 之前和之后都发出了提交,根据文档:

Oracle 数据库在以下情况下发出隐式提交:

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

最新更新