在ORACLE中,CREATE TABLE语句是不能回滚的。
SQL> show autocommit autocommit OFF SQL> create table test(id int);
表已创建。
SQL> insert into test values(1);
已创建 1 行。
SQL> select * from test;
ID ---------- 1
SQL> rollback;
回退已完成。
SQL> select * from test;
未选定行
SQL> select table_name from user_tables 2 where table_name='TEST';
TABLE_NAME ------------------------------------------------------------ TEST
新插入的记录是可以回滚的,但是表是不能回滚掉的,除非手工发出DROP TABLE语句。
而在DB2中,却不一样:
db2 => list command options
命令行处理器选项设置
后端进程等待时间(秒) (DB2BQTIME) = 1 连接至后端的重试次数 (DB2BQTRY) = 60 请求队列等待时间(秒) (DB2RQTIME) = 5 输入队列等待时间(秒) (DB2IQTIME) = 5 命令选项 (DB2OPTIONS) =
选项 描述 当前设置 ------ ---------------------------------------- --------------- -a 显示 SQLCA OFF -c 自动落实 OFF -d 检索并显示 XML 声明 OFF -e 显示 SQLCODE/SQLSTATE OFF -f 读取输入文件 OFF -i 显示 XML 数据并带有缩进 OFF -l 将命令记录到历史记录文件中 OFF -m 显示受影响的行数 OFF -n 除去换行字符 OFF -o 显示输出 ON -p 显示交互式输入提示符 ON -q 保留空格和换行符 OFF -r 将输出保存到报告文件 OFF -s 在命令出错时停止执行 OFF -t 设置语句终止字符 OFF -v 回传当前命令 OFF -w 显示 FETCH/SELECT 警告消息 ON -x 不打印列标题 OFF -z 将所有输出保存到输出文件 OFF
db2 => select * from test SQL0204N "SHOUPENG.YAN.TEST" 是一个未定义的名称。 SQLSTATE=42704 db2 => create table test(id int) DB20000I SQL 命令成功完成。 db2 => insert into test values(1) DB20000I SQL 命令成功完成。 db2 => insert into test values(2) DB20000I SQL 命令成功完成。 db2 => select * from test
ID ----------- 1 2
2 条记录已选择。
db2 => rollback DB20000I SQL 命令成功完成。 db2 => select * from test SQL0204N "SHOUPENG.YAN.TEST" 是一个未定义的名称。 SQLSTATE=42704 db2 => list tables
表/视图 模式 类型 创建时间 ------------------------------- --------------- ----- --------------------------
VIEW1 SHOUPENG.YAN V 2011-10-20-12.42.39.046002
1 条记录已选择。
可以看到在DB2中先创建的表也回滚掉了。
看来新学一门数据库,得忘掉在其他数据库中所学的东西。 |