【发布时间】:2011-11-02 22:52:05
【问题描述】:
假设,在 Oracle 9i 的 SQL 提示符下,我正在使用以下 CREATE SQL 命令创建一个简单的表,例如 orderStatus,其中只有两列。
CREATE TABLE orderStatus(statusID varchar2(6) primary key, status varchar2(15));
然后我正在使用以下 INSERT INTO 命令输入四行。
INSERT INTO orderStatus VALUES("S0001", "Fulfilled");
INSERT INTO orderStatus VALUES("S0002", "Back order");
INSERT INTO orderStatus VALUES("S0003", "In process");
INSERT INTO orderStatus VALUES("S0004", "Cancelled");
成功执行上述命令后,我将发出 COMMIT 命令以完成当前事务。
COMMIT;
然后我需要触发以下 DELETE 命令。
DELETE FROM orderStatus WHERE statusID="S0004";
删除 一个 状态 ID 为 S0004 的行。该表现在只包含 3 行。
假设,我需要将 NOT NULL 约束添加到需要以下 ALTER TABLE 命令的状态列。
ALTER TABLE orderStatus MODIFY(status varchar(15) NOT NULL);
将更改表 orderStatus 以向状态列添加 NOT NULL 约束。
现在,假设我在 SQL 提示符下执行 ROLLBACK 命令,这会导致当前事务完成,并且此表中先前受影响的所有数据都被撤消。这样,之前使用 DELETE 命令删除的行应该被撤消,表现在应该包含原来的四行,但是 ROLLBACK 的效果无法观察到,表将只有三行。为什么会这样?
【问题讨论】: