oracle - 需要提交哪些语句?

too*_*oop 50 sql database oracle session commit

在对表进行进一步操作之前需要提交的语句列表是什么,以避免锁定?我不是在讨论具有多个语句和事务完整性的完整事务; 相反,我指的是单一陈述.

我知道insert应该被提交但truncate有一个自动提交.需要提交的语句的完整列表是什么?

需要提交(入门名单):

UPDATE
INSERT
DELETE
Run Code Online (Sandbox Code Playgroud)

ric*_*ics 54

需要提交 /回滚DML(数据操作语言)命令.是这些命令的列表.

数据操作语言(DML)语句用于管理模式对象中的数据.一些例子:

INSERT - insert data into a table
UPDATE - updates existing data within a table
DELETE - deletes all records from a table, the space for the records remain
MERGE - UPSERT operation (insert or update)
CALL - call a PL/SQL or Java subprogram
EXPLAIN PLAN - explain access path to data
LOCK TABLE - control concurrency
Run Code Online (Sandbox Code Playgroud)

  • 你必须在SELECT或EXPLAIN PLAN之后提交吗? (2认同)

APC*_*APC 12

在机械方面,COMMIT进行交易.也就是说,事务是在两个COMMIT语句(或ROLLBACK)之间发生的所有活动(一个或多个DML语句).

在Oracle中,DDL语句本身就是一个事务,因为在执行语句之前和之后再次发出了隐式COMMIT.TRUNCATE是一个DDL命令,因此它不需要显式提交,因为调用它会执行隐式提交.

从系统设计的角度来看,交易是业务的工作单元.它可能包含单个DML语句或其中几个.没关系:只有完整的事务需要COMMIT.除非或直到我们完成整个业务工作单元,否则发布COMMIT没有任何意义.

这是一个关键概念.COMMIT不只是释放锁.在Oracle中,他们还发布了锁存器,例如感兴趣的事务列表.由于Oracle的读一致性模型,这会产生影响.由于提交不当而导致例外ORA-01555: SNAPSHOT TOO OLDORA-01002: FETCH OUT OF SEQUENCE发生的异常.因此,对于我们的事务来说,只要需要它们就挂在锁上是至关重要的.


Fab*_*ney 6

必须提交或回滚DML.DDL不能.

http://www.orafaq.com/faq/what_are_the_difference_between_ddl_dml_and_dcl_commands

你可以打开自动提交,这只是为了DML.DDL永远不是事务的一部分,因此没有像显式提交/回滚那样的东西.

truncate 是DDL,因此暗中提交.

编辑
我要说对不起.就像评论中提到的@DCookie和@APC一样,存在类似于DDL的隐式提交.请参阅此处,了解有关Ask Tom的问题.这与我所学到的相反,我仍然有点好奇.

  • -1.当然DDL是承诺的.DDL本质上是对数据字典的更改的发布,必须提交它们才能应用它们.不同之处仅在于提交是隐含的,而且正如DCookie所说,它们中有两个.因此,如果我们在表上发布更新然后执行失败的DDL语句,我们就无法回滚更新.即使未应用后续DDL,它也已提交. (2认同)