当我尝试在具有相似列的表中插入记录时,我遇到了问题。所以基本上我的表格结构如下::
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+----------------+
现在我的PDO语句是这个::
INSERT INTO supplement_brand (name) VALUES (:name)
基本上我想要的是,每个名称字段都有一个唯一的值。我已在名称字段上设置了INDEX。现在我想从id字段中删除主键和自动增量属性。但这将导致糟糕的数据库设计实践。
现在插入时,id字段会自动自动递增,并且会在名称字段中插入许多重复值:
以下是发生什么事的样本::
+-----+-----------------------------+
| id | name |
+-----+-----------------------------+
| 1 | 2 to 1 Protein Bar |
| 7 | 2 to 1 Protein Bar |
| 8 | 2 to 1 Protein Bar |
| 28 | 2 to 1 Protein Bar |
| 93 | 2 to 1 Protein Bar |
| 98 | 2 to 1 Protein Bar |
| 230 | 2 to 1 Protein Bar |
| 231 | 2 to 1 Protein Bar |
| 232 | 2 to 1 Protein Bar |
| 2 | 360CUT |
| 3 | 360CUT |
| 4 | 360CUT |
| 5 | 360CUT |
| 6 | 360CUT |
| 9 | 4 Dimension Nutrition |
| 10 | 4 Dimension Nutrition |
| 11 | 4 Dimension Nutrition |
| 12 | 4 Dimension Nutrition |
| 13 | 4 Dimension Nutrition |
| 14 | 4 Dimension Nutrition |
| 15 | 4 Dimension Nutrition |
| 16 | 4 Dimension Nutrition |
| 17 | 4 Dimension Nutrition |
| 18 | 4 Dimension Nutrition |
| 19 | 4 Dimension Nutrition |
| 20 | 4 Dimension Nutrition |
| 21 | 4 Dimension Nutrition |
| 22 | 4 Dimension Nutrition |
| 23 | 4 Dimension Nutrition |
| 24 | 4 Dimension Nutrition |
| 25 | 4 Dimension Nutrition |
+-----+-----------------------------+
如何防止在名称字段中插入重复值。请提供任何帮助,我现在真的被困住了。提前致谢
答案 0 :(得分:1)
INDEX
不保证唯一性。为此类任务创建了UNIQUE
密钥。
答案 1 :(得分:0)
ALTER TABLE `supplement_brand` ADD UNIQUE (`name`);
这应确保名称字段需要唯一值。
如果您添加另一个列,即品牌,并且您希望该名称是唯一的,但只有当他们共享同一品牌时,您才能执行以下操作:
ALTER TABLE `supplement_brand` ADD UNIQUE (`name` ,`brand`);
答案 2 :(得分:0)
您有两个选项,首先您可以在上面的字段“name”语句中使用UNIQUE或者您可以使用UPSERT语句:请点击此链接获取完整说明:http://mechanics.flite.com/blog/2013/09/30/how-to-do-an-upsert-in-mysql/