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)
APC*_*APC 12
在机械方面,COMMIT进行交易.也就是说,事务是在两个COMMIT语句(或ROLLBACK)之间发生的所有活动(一个或多个DML语句).
在Oracle中,DDL语句本身就是一个事务,因为在执行语句之前和之后再次发出了隐式COMMIT.TRUNCATE是一个DDL命令,因此它不需要显式提交,因为调用它会执行隐式提交.
从系统设计的角度来看,交易是业务的工作单元.它可能包含单个DML语句或其中几个.没关系:只有完整的事务需要COMMIT.除非或直到我们完成整个业务工作单元,否则发布COMMIT没有任何意义.
这是一个关键概念.COMMIT不只是释放锁.在Oracle中,他们还发布了锁存器,例如感兴趣的事务列表.由于Oracle的读一致性模型,这会产生影响.由于提交不当而导致例外ORA-01555: SNAPSHOT TOO OLD或ORA-01002: FETCH OUT OF SEQUENCE发生的异常.因此,对于我们的事务来说,只要需要它们就挂在锁上是至关重要的.
必须提交或回滚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的问题.这与我所学到的相反,我仍然有点好奇.