当编写大型事务(大量插入、删除、更新)并因此违反 Informix 中的约束(v10,但也应该适用于其他版本)时,我收到一条不太有用的消息,例如,我违反了约束r190_710。如何找出我只知道其名称的特定约束所涵盖的表和键?
最佳答案
Tony Andrews 建议(指向 URL 的不同端点):
From Informix Guide to SQL: Reference it appears you should look at the system catalog tables SYSCONSTRAINTS and SYSINDICES.
该手册中描述了 Informix 系统目录。
毫无疑问,SysConstraints 表是分析约束的起点;您可以在该表中找到约束名称,然后您可以从那里找到其他详细信息。
但是,您还必须查看其他表,而不仅仅是(甚至直接)SysIndices。
例如,我的数据库中的表有很多 NOT NULL 约束。对于那些,约束类型是“N”,无需在别处寻找更多信息。
'P'的约束类型表示主键;这将需要通过 SysIndexes View 或 SysIndices 表进行更多分析。同样,“U”约束类型表示唯一约束,需要来自 SysIndexes View 或 SysIndices 表的额外信息。
'C'的约束类型表示检查约束;约束的文本(和二进制编译形式)在 SysChecks 表中找到(数据类型为“T”和“B”;数据或多或少使用 Base-64 编码,但没有“=”填充最后并使用不同的字符表示 62 和 63)。
最后,约束类型“R”表示引用完整性约束。您使用 SysReferences 表找出引用了哪个表,并使用 SysIndexes 或 SysIndices 确定使用了引用表和被引用表的哪些索引,然后您可以从中发现相关列。这可能会变得非常毛茸茸!
关于database - 如何从 Informix 中的名称获取约束详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/320045/