2011-05-26 65 views
1

我想要一个ID和名称作为我的表的主键。我想增加每个插入id,所以我把它设置为auto_increment。问题是,当我插入到表中一个新的条目具有相同的名称,它插入一个新的ID,并有重复的条目具有相同的名称和不同的ID。我不想事先搜索表格,看看是否有预先录入。请帮我解决这个问题。作为导致重复项的主键的自动增量

回答

2

我认为你做了什么这样

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) 
+0

感谢您的提示...不知道那..也会照顾这一点..再次感谢.. – 2011-05-26 09:04:40

0

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

0

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

+0

这是可行的,但需要OP如果他希望他的查询,不急不慢也改变主键定义。 – Johan 2011-05-26 08:52:38

2

如果你希望它是由名称唯一,你需要在名称字段中添加唯一索引,然后你可以重复键使用mysql语法:mysql reference for on duplicate key

+0

谢谢..完全忘记了这个独特的元素..谢谢.. – 2011-05-26 08:44:52