当我尝试在具有相似列的表中插入记录时,我遇到了一个问题。所以基本上我的表格结构是这样的::
+-------+-------------+------+-----+---------+----------------+
| 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)
所以基本上我想要的是,每个名称字段都有一个唯一的值。我已经在名称字段上设置了索引。现在我想从 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 |
+-----+-----------------------------+
如何防止在名称字段中插入重复值。请提供任何形式的帮助,我现在真的被困住了。提前致谢
INDEX
不能保证唯一性。为此类任务创建了UNIQUE
密钥。
ALTER TABLE `supplement_brand` ADD UNIQUE (`name`);
这应确保名称字段需要唯一值。
如果您添加另一列即品牌,并且您希望名称是唯一的,但前提是它们共享同一品牌,您也可以执行以下操作:
ALTER TABLE `supplement_brand` ADD UNIQUE (`name` ,`brand`);
您有两个选择,首先您可以对上面的字段"name"语句使用 UNIQUE 或者您可以使用 UPSERT 语句:点击此链接查看完整说明:http://mechanics.flite.com/blog/2013/09/30/how-to-do-an-upsert-in-mysql/