Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2744098
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: DB2/Informix

2016-08-13 00:46:49


一、新建测试表

[db2inst2@db2 ~]$ db2 "create table tank01(sid int not null,name varchar(40) not null,constraint pk_id primary key(sid))"
DB20000I  SQL 命令成功完成。

[db2inst2@db2 ~]$ db2 "create table tank02(sid int,name varchar(30) not null,constraint fk_id foreign key(sid) references tank01(sid) on delete restrict)"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ 
二、主健约束测试
[db2inst2@db2 ~]$ db2 "insert into tank01 values(100,'tank.zhang')"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "insert into tank01 values(101,'tank.zhang')"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "insert into tank02 values(101,'tank.zhang')"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "insert into tank02 values(103,'tank.zhang')"
DB21034E  该命令被当作 SQL
语句来处理,因为它是无效的“命令行处理器”命令。在 SQL
处理期间,它返回:
SQL0530N  FOREIGN KEY "DB2INST2.TANK02.FK_ID"
的插入或更新值不等于父表的任何父键值。  SQLSTATE=23503
[db2inst2@db2 ~]$ db2 "insert into tank02 values(100,'tank.zhang')"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$

三、测试在父表中执行truncate table
[db2inst2@db2 ~]$ db2 "delete from tank02"   //清理子表数据
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "truncate table tank01 immediate" //清理父表出错
DB21034E  该命令被当作 SQL
语句来处理,因为它是无效的“命令行处理器”命令。在 SQL
处理期间,它返回:
SQL20356N  无法截断 "DB2INST2.TANK01" 表,因为此表存在 DELETE
触发器,或者此表是引用约束中的父表。  SQLSTATE=428GJ
[db2inst2@db2 ~]$ 

四、关闭子表外健的约束
[db2inst2@db2 ~]$ db2 "ALTER TABLE tank02 ALTER FOREIGN KEY fk_id  NOT ENFORCED"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "truncate table tank01 immediate"
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "ALTER TABLE tank02 ALTER FOREIGN KEY fk_id  ENFORCED"  //开启子健约束,由于子表中存在有数据故报错
DB21034E  该命令被当作 SQL
语句来处理,因为它是无效的“命令行处理器”命令。在 SQL
处理期间,它返回:
SQL0667N  因为表包含带有外键值的行,而在父表的父键中找不
到这些外键值,所以不能创建 FOREIGN KEY "FK_ID"。  SQLSTATE=23520
[db2inst2@db2 ~]$ db2 "truncate table tank02 immediate" //清理子表数据
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ db2 "ALTER TABLE tank02 ALTER FOREIGN KEY fk_id  ENFORCED" //开启子健约束
DB20000I  SQL 命令成功完成。
[db2inst2@db2 ~]$ 

阅读(2113) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~