- 题目
- 解析及答案:
题目翻译:
关于Oracle数据库中的事务请选择两个正确的陈述:
A) 当用户退出SQL*Plus时,未提交的事务会自动提交。
B) 由含有未提交事务的会话发出的DDL语句会自动提交该事务。
C) DDL语句仅自动提交由执行DDL引起的数据字典更新。
D) 一个会话可以看到由同一用户在不同会话中做出的未提交更新。
E) DML语句总是开始新的事务。
分析:
选项 A
在 Oracle 数据库中,当用户退出 SQLPlus 时,未提交的事务并不会自动提交。该事务仍处于未提交状态,如果用户重新连接并回滚该事务,所做的更改将会被撤销。例如,如果用户开启一个事务,向一个表中插入了一些记录,然后未提交就关闭了 SQLPlus,那么在后续的会话中,那些插入的记录仍然可以被回滚。所以,该选项错误。
选项 B
当一个会话中存在未提交的事务时,该会话发出的数据定义语言(DDL)语句会自动提交该事务。像 CREATE TABLE(创建表)、ALTER TABLE(修改表)等这类 DDL 语句会导致隐式提交。例如,如果用户已经向一个表中插入了一些行,然后在该表上执行一个 CREATE INDEX(创建索引)语句,那么插入操作就会被提交。所以,该选项正确。
选项 C
DDL 语句并非只提交因执行 DDL 而导致的数据字典更新。它们会提交整个当前活动的事务。当执行一个 DDL 语句时,它不仅会更新数据字典,还会提交当前事务中任何未提交的数据操作语言(DML)操作。例如,如果用户在一个事务进行过程中执行了一些 INSERT(插入)和 UPDATE(更新)操作,然后执行一个 DDL 语句,那么所有这些 DML 操作都会被提交。所以,该选项错误。
选项 D
一个会话无法看到同一用户在不同会话中所做的未提交的更新。Oracle 使用多版本读一致性模型。每个会话看到的数据视图都是其查询或事务开始时的一致状态。其他会话中未提交的更改对给定的会话是不可见的。例如,如果一个会话向一个表中插入了一条新记录但未提交,另一个会话查询该表时将不会看到那条新记录。所以,该选项错误。
选项 E
DML 语句并非总是开启新的事务。一个事务可以包含多个 DML 语句。例如,用户可以开启一个事务,然后在同一个事务内执行多个 INSERT(插入)、UPDATE(更新)和 DELETE(删除)语句。并非每个 DML 语句都会开启一个新的事务。所以,该选项错误。
答案:本题正确只有 B,但题目要求选两个,那就AB吧。