【问题标题】:Why do I get this error when inserting a record: duplicate value for a record with unique key为什么插入记录时出现此错误:具有唯一键的记录的重复值
【发布时间】:2013-08-01 18:45:35
【问题描述】:

让我解释一下……

当向informix db表中插入一条记录时,如果我为其中一列指定了一个值,无论该值是什么,它总是会抛出以下错误(这个小信息是黄金,花了我一段时间弄清楚)。该列是一个字符 (4)。我可以告诉的字段上没有唯一的键索引(使用松鼠)。我正在设置值的表中有许多其他列,但没有这个问题。

ERROR [HY000] [Informix][Informix ODBC Driver][Informix]ISAM error:  duplicate value for a record with unique key.

Error: Could not insert new row - duplicate value in a UNIQUE INDEX column.

表架构一定有一些我遗漏的东西......谁能指出我正确的方向在哪里以及如何找到它失败的这个“假定”唯一键(最好使用松鼠)?我已经查看了“主键”选项卡和“索引”选项卡下的对象窗口,并且该列未在任一选项卡中列出。

我可以根据 squirrel 提供有关表架构的更多信息: 没有主键,有 10 个索引,其中没有一个与有问题的列相关联。 10 个索引中只有 1 个是唯一索引。

【问题讨论】:

  • 您需要查看要插入的表上的索引。这些索引中的一个(或多个)指定一个列(或一组列),它可能只包含一次任何值。这种唯一索引的典型例子是表上的主键。我的第一个猜测是您插入的行具有表中已存在的 PK 值 - 这是此错误的最常见原因。
  • 表上是否有触发器?也许错误来自触发器中发生的操作。
  • 您能提供表格的详细信息吗?我不熟悉 Informix,但看起来 (stackoverflow.com/questions/4284187/…) 有一个“dbschema”命令行工具。
  • @HLGEM - 关于触发器的好点,我会看看我是否能弄清楚如何在informix中看到它们。
  • dbschema -d dbname -t tablename,假设 INFORMIX 环境变量(INFORMIXDIR、ONCONFIG、可能是 DB_LOCALE、INFORMIXSQLHOSTS)设置正确。

标签: .net sql informix


【解决方案1】:

这些问题通常是由触发器引起的。我会检查是否有可能导致问题的触发器。

【讨论】:

    【解决方案2】:

    你说:

    如果我为其中一列指定一个值,无论该值是什么,它都会抛出 [-239 / -100] 错误。

    请记住,当您插入表格时,您会插入整行。即使您只为其中一列指定了值,也会将默认值(通常为 NULL)插入到其他列中。

    (我也有可能误解了您的意思;您可能会说,如果您为除一个特定列之外的所有列指定值,则 INSERT 有效;如果您也为特定列指定值, INSERT 总是失败。您可能需要运行SELECT COUNT(*), COUNT(DISTINCT problem_column) FROM <table> 来帮助确定问题。)

    没有主键。有 10 个索引,没有一个与有问题的列相关联。 10 个索引中只有 1 个是唯一索引。

    你有一个唯一的索引(它实际上是主键,即使它没有被声明为主键)。如果您没有在 INSERT 语句中指定该列的值,那么很可能正在插入 NULL,并且您在表中只能有一行在该列中有 NULL。 Informix 不支持“UNIQUE UNLESS NULL”。

    请注意,一个表上的 10 个索引是一个很大的数字;除非它们是外键列上的索引,否则我需要一些令人信服的证据,即其中超过 3 个可以发挥作用。

    要获得更多帮助,您需要发帖:

    1. 表的架构(或架构的合适子集,并指示缺少多少列)。
    2. 您正在执行的 INSERT 语句。

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      相关资源
      最近更新 更多