我们有一个名为asamembr的表,其中包含两个字段:cust_code和mbrcode。
还有另一个表成员消息与外键具有相同的字段但是当我使用以下查询来创建约束时:
alter table 'informix'.messageclubmembership add constraint foreign key
(membership_number, member_code)
references 'informix'.asamembr
(cust_code, mbr_code)
on delete cascade
constraint fk_messageclubm926;
我收到此错误:
Cannot find unique constraint or primary key on referenced table (informix.asamembr)
请告诉我如何在两个字段cust_code和mbr_code上查询表asamembr上是否存在主键?
答案 0 :(得分:6)
首先查找PK的索引名称(pk_idx列)
select c.constrname, c.constrtype as tp , c.idxname as pk_idx , t2.tabname, c2.idxname
from sysconstraints c, systables t, outer (sysreferences r, systables t2, sysconstraints c2)
where t.tabname = "asamembr"
and t.tabid = c.tabid
and r.constrid = c.constrid
and t2.tabid = r.ptabid
and c2.constrid = r.constrid
其中constrtype:
constrtype CHAR(1)识别约束类型的代码:
C =检查约束
N =非NULL
P =主键
R =参考
T =表
U =唯一
然后,检查索引列(查找PK约束的相同索引名称):
select unique
t.tabname
, i.idxname
, i.idxtype
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part1 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part2 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part3 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part4 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part5 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part6 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part7 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part8 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part9 )
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part10)
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part11)
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part12)
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part13)
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part14)
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part15)
, (select c.colname from syscolumns c where c.tabid = i.tabid and c.colno = i.part16)
from sysindexes i , systables t
where i.tabid = t.tabid
and t.tabname = "asamembr";
其中idxtype:
idxtype CHAR(1)索引类型:
U =独特的 D =允许重复 G = Nonbitmap generali
g =位图一般化 u =唯一,位图
d =非唯一,位图
在Informix online manuals搜索“sysconstraints”或“sysindexes”
答案 1 :(得分:2)