database - 如何从 Informix 中的名称获取约束详细信息?

标签 database constraints informix

当编写大型事务(大量插入、删除、更新)并因此违反 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/

相关文章:

mysql - 连接到两个表之一的实体关系图

mysql - 未找到 SQL 完整性约束父键

java - 将 Informix-4GL 程序中的 SQL 查询 "SELECT UNIQUE 1..."转换为 Java 代码

sql - IF 语句而不是选择

sql-server - 在不同的 DBMS 之间传输数据

mysql - 对要连接的查询结果建立索引

mongodb - 是否可以通过collection.insert()在meteor中添加多个文档?

sql - 如何确保postgresql表中只有一列不为空

mysql - 创建触发器或约束来过滤重复数据

database - 是否可以在 PHPStorm 中为数据库数据源指定时区?