【问题标题】:Insert query fails with error duplicate entry , where as select query returns null插入查询因错误重复条目而失败,其中选择查询返回 null
【发布时间】:2020-02-04 17:47:46
【问题描述】:

插入查询失败并出现错误“重复条目” 但是当我尝试对主键运行 SELECT 查询时,它没有返回任何行。

如果没有行,那这怎么可能是重复条目

描述我的表;

Field   Type    Null    Key Default Extra
folderId    binary(16)  NO  PRI     
referenceId binary(16)  NO  PRI     
referenceType   String  NO  

插入查询

Select folderId_2 from FolderRecordContents limit 5;
INSERT INTO MyTable
SET folderid = 'value1',
    referenceid = 'value 11',
    referenceType = 'value 111';    

此操作失败并出现错误“Error Code: 1062. Duplicate entry '\xA7\xC0\xF0\xCF\x06\xDDN0\xB7\x9F\xC8bc\x96\xE3\xF7-TestSchema-' for key 'folderId_2'

所以我试着看看是否有任何条目 选择查询

Select * from MyTable 
Where folderId = 'value1' and 
      referenceid = 'value 11';

结果:"No rows returned"

我不明白两件事

  1. 如果选择没有输出,那么这里是如何发生重复的?

  2. 键“folderId_2”出现重复错误,但列名是“folderid”而不是“folderId_2”

更新:

我搜索了表上的索引, 原来,为名为“folderId_2”的表创建了一个索引

现在如何避免索引重复。

【问题讨论】:

  • 您是否为此表定义了任何触发器?
  • 请运行查询Select * from MyTable Where folderId = 'value1'排除referenceid = 'value 11'
  • 是的,也试过了,没有行
  • @peterm:我找到了一个为 'folderId_2' 的表创建的索引,我不明白我现在如何设法克服它,我应该尝试获取索引中的所有键还是什么?
  • @RyanNghiem :更新了描述

标签: mysql duplicates


【解决方案1】:
  1. 如果选择没有输出,那么这里是如何发生重复的。在选择中,如果列中的值为 null,则使用默认值。第二个空行产生重复值

  2. 重复错误表示键 folderId_2 但列名称是 folderid 而不是 folderId_2folderId_2 是索引的名称.. 可能您在列 folderId 上创建了一个唯一约束,名称为 folderId_2

    为此,您应该删除唯一约束并重新创建没有唯一子句的索引

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多