ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [原创]这个挺有意思的--数据库也玩眼见不一定为实啊!!

[原创]这个挺有意思的--数据库也玩眼见不一定为实啊!!

原创 Linux操作系统 作者:myfriend2010 时间:2019-06-19 20:39:05 0 删除 编辑
这个挺有意思的!呵呵

C:>db2 connect to dw164 user ccp
输入 ccp 的当前密码:

   数据库连接信息

数据库服务器         = DB2/NT 8.2.0
SQL 授权标识         = CCP
本地数据库别名       = DW164


C:> db2 CREATE TABLE db2admin.ztest   
db2 (cont.) =>   (  
db2 (cont.) =>   id1 INT NOT NULL,   
db2 (cont.) =>   id2 CHAR(1) NOT NULL  
db2 (cont.) =>       CONSTRAINT c_ztest_id2  
db2 (cont.) =>       CHECK (id2 IN ('1','2'))  
db2 (cont.) =>       NOT ENFORCED  ENABLE QUERY OPTIMIZATION,  
db2 (cont.) =>   id3 INT NOT NULL,  
db2 (cont.) =>       CONSTRAINT c_ztest_id3  
db2 (cont.) =>       CHECK (id3 BETWEEN 10 AND 50)  
db2 (cont.) =>       NOT ENFORCED  ENABLE QUERY OPTIMIZATION
db2 (cont.) =>   )
DB21034E  该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0601N  要创建的对象名与类型为"TABLE" 的现有名称 "DB2ADMIN.ZTEST" 相同。
SQLSTATE=42710

C:>  db2 insert into db2admin.ztest values(1,'1',60),(2,'2',20),(3,'1',3),(4,'2
',34),(5,'z',77),(6,'x',140),(7,'1',3),(8,'2',24)
DB20000I  SQL命令成功完成。

C:>  db2 select * from db2admin.ztest

ID1         ID2 ID3
----------- --- -----------
          6 x           140
          6 x           140

          5 z            77
          7 1             3
          5 z            77
          7 1             3
          1 1            60
          2 2            20
          3 1             3
          4 2            34
          8 2            24
          1 1            60
          2 2            20
          3 1             3
          4 2            34
          8 2            24

  16 条记录已选择。


C:>  db2 select * from db2admin.ztest where id2 ='x'

ID1         ID2 ID3
----------- --- -----------

  0 条记录已选择。


C:>  db2 alter table db2admin.ztest alter check c_ztest_id2 disable query optim
ization

DB20000I  SQL命令成功完成。

C:>  db2 select * from db2admin.ztest where id2 ='x'

ID1         ID2 ID3
----------- --- -----------
          6 x           140
          6 x           140


  2 条记录已选择。


C:>db2 terminate
DB20000I  TERMINATE命令成功完成。

C:>
 
结论:
NOT ENFORCED,它建议 DB2 在插入或更新数据时不强制检查本列!也就是说插入数据的时候没有强行限制!

ENABLE QUERY OPTIMIZATION,DB2 在对该表运行 SELECT 语句时使用它!
也就是说在select的时候数据库会根据check的值来进行sql的OPTIMIZATION,因为check中没有'x',所以直接返回0条记录!
 
这个不错!
 
看来有时候眼见还真不一定为实啊!!!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/694276/viewspace-426835/,如需转载,请注明出处,否则将追究法律责任。

上一篇: DB2中的文件
请登录后发表评论 登录
全部评论

注册时间:2018-09-01

  • 博文量
    187
  • 访问量
    126697