db2的DDL语句和DML语句一样,不会自动提交。
# session1
db2 => connect to miaomiao user db2admin using asdf
数据库连接信息
数据库服务器 = DB2/NT 9.5.0
SQL 授权标识 = DB2ADMIN
本地数据库别名 = MIAOMIAO
SQL 授权标识 = DB2ADMIN
本地数据库别名 = MIAOMIAO
db2 => update command options using c off
DB20000I UPDATE COMMAND OPTIONS命令成功完成。
db2 => create table miaomiao.test1(a int)
DB20000I SQL命令成功完成。
db2 =>
DB20000I UPDATE COMMAND OPTIONS命令成功完成。
db2 => create table miaomiao.test1(a int)
DB20000I SQL命令成功完成。
db2 =>
# session2
db2 => describe table miaomiao.test1
(hang...)
(hang...)
# session3
db2 => select * from miaomiao.test2
(hang...)
(hang...)
直到session1发出commit命令,session2和session3才会显示出结果来。而在Oracle里,DDL是隐含了提交/回滚的。
那说明在db2里,DDL语句也是可以回滚的呗?继续测试:
# session1
db2 => create table miaomiao.test3(a int)
DB20000I SQL命令成功完成。
DB20000I SQL命令成功完成。
# session2
db2 => select * from miaomiao.test3
(hang...)
当session1发出rollback命令后,session2就会提示表不存在:
# session2
db2 => select * from miaomiao.test3
SQL0204N "MIAOMIAO.TEST3" 是一个未定义的名称。 SQLSTATE=42704
SQL0204N "MIAOMIAO.TEST3" 是一个未定义的名称。 SQLSTATE=42704
而在test3创建之后、提交之前它是被hang住的。