如何在 MySQL DML 语句中设置特定的 UNIQUE 列


How to set specific UNIQUE column in MySQL DML Statements

当我尝试在具有相似列的表中插入记录时,我遇到了一个问题。所以基本上我的表格结构是这样的::

+-------+-------------+------+-----+---------+----------------+
| 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/