【发布时间】:2011-09-02 09:41:18
【问题描述】:
我想要一个 id 和 name 作为我的表的主键。我想在每次插入时增加 id,所以我将它设置为 auto_increment。问题是当我在表中插入一个具有相同名称的新条目时,它会使用新的 ID 插入它,并且存在具有相同名称和不同 ID 的重复条目。我不想事先搜索表格以查看是否有任何条目。请帮我解决这个问题。
【问题讨论】:
标签: php mysql primary-key auto-increment
我想要一个 id 和 name 作为我的表的主键。我想在每次插入时增加 id,所以我将它设置为 auto_increment。问题是当我在表中插入一个具有相同名称的新条目时,它会使用新的 ID 插入它,并且存在具有相同名称和不同 ID 的重复条目。我不想事先搜索表格以查看是否有任何条目。请帮我解决这个问题。
【问题讨论】:
标签: php mysql primary-key auto-increment
我认为你做过这样的事情
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)
【讨论】:
如果你想让它在名字上唯一,你需要在name字段上添加一个唯一索引,然后你可以使用mysql语法for on duplicate key:mysql reference for on duplicate key
【讨论】:
您可以将唯一索引应用于您的姓名字段,或者如果您要存储人员,则允许重复姓名。
【讨论】:
添加 UNIQUE(your_column_name) 您应该将 your_column_name 替换为数据库中的列。
【讨论】: