自动增量作为主键导致重复条目

时间:2011-05-26 08:29:18

标签: php mysql primary-key auto-increment

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

4 个答案:

答案 0 :(得分:2)

如果您希望它按名称唯一,则需要在名称字段上添加唯一索引,然后您可以在复制键上使用mysql语法:mysql reference for on duplicate key

答案 1 :(得分:2)

我认为你做过类似的事情

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

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

另请注意,长主键是错误的想法,PK越长,插入和选择的执行速度就越慢。这在InnoDB上尤其糟糕,因为PK包含在每个辅助密钥中,使索引文件膨胀。

将其更改为此

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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