【问题标题】:autoincrement as primary key causing duplicate entries自动增量作为主键导致重复条目
【发布时间】:2011-09-02 09:41:18
【问题描述】:

我想要一个 id 和 name 作为我的表的主键。我想在每次插入时增加 id,所以我将它设置为 auto_increment。问题是当我在表中插入一个具有相同名称的新条目时,它会使用新的 ID 插入它,并且存在具有相同名称和不同 ID 的重复条目。我不想事先搜索表格以查看是否有任何条目。请帮我解决这个问题。

【问题讨论】:

    标签: php mysql primary-key auto-increment


    【解决方案1】:

    我认为你做过这样的事情

    CREATE TABLE table1
       id unsigned integer autoincrement,
       name varchar,
       ....
       primary key (id,name)
    

    此主键不会选择唯一名称,因为自动增量 ID 将始终使 键作为一个整体唯一,即使有重复的 name-fields。

    还要注意,长主键是一个的主意,PK 越长,插入和选择执行的速度就越慢。这在 InnoDB 上尤其糟糕,因为 PK 包含在每个辅助键中,从而使索引文件膨胀。

    改成这个

    CREATE TABLE table1
       id unsigned integer autoincrement primary key,
       name varchar,
       ....
       unique index `name`(name)
    

    【讨论】:

    • 感谢您的提示...不知道那件事..也会处理..再次感谢..
    【解决方案2】:

    如果你想让它在名字上唯一,你需要在name字段上添加一个唯一索引,然后你可以使用mysql语法for on duplicate key:mysql reference for on duplicate key

    【讨论】:

      【解决方案3】:

      您可以将唯一索引应用于您的姓名字段,或者如果您要存储人员,则允许重复姓名。

      【讨论】:

        【解决方案4】:

        添加 UNIQUE(your_column_name) 您应该将 your_column_name 替换为数据库中的列。

        【讨论】:

        • 这会起作用,但如果 OP 希望查询不慢,他还需要更改主键定义。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 2014-04-21
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        相关资源
        最近更新 更多