mySQL如何防止插入,除非两列(字段)的组合是唯一的? [复制]

Posted

技术标签:

【中文标题】mySQL如何防止插入,除非两列(字段)的组合是唯一的? [复制]【英文标题】:mySQL how to prevent insert unless combination of two columns (fields) are unique? [duplicate] 【发布时间】:2012-11-01 05:50:41 【问题描述】:

可能重复:How do I specify unique constraint for multiple columns in mysql?

我是 MySQL 的新手,并且有一个表,我正在转换为 MySQL,其中包含帐户的“订单指南”,这些是帐户通常订购的所有项目。如果帐户的项目(产品编号)已经在订单指南表中,我需要防止插入,这取决于两个字段的唯一性组合。订单指南表中数据的简化示例:

uID  Account_Num   Prod_Num
0    1000          2000
1    1000          2010
2    1000          2020
3    1000          2030
4    1001          2000
5    1001          2010
6    1001          2020
7    1001          2021

我不能只使“Account_Num”和“Prod_Num”字段唯一。我需要一种方法来设置规则或指定“Account_Num”和“Prod_Num”的组合是否唯一允许插入。 uID 字段是唯一的自动增量字段。这可能吗?

【问题讨论】:

【参考方案1】:

您会很高兴知道索引可以是多列 :-)

ALTER TABLE my_table ADD UNIQUE account_prod (Account_Num, Prod_Num);

【讨论】:

太棒了!谢谢!我没有意识到唯一索引作为一个规则。【参考方案2】:
create unique index mytable_idx1 on mytable(Account_Num, Prod_Num);

【讨论】:

【参考方案3】:

当然。

看看

INSERT INTO <yourtable> (cols)
  SELECT cols FROM <yourtable2>, <yourtable> where <yourcondition>

确保选择只返回新条目。

【讨论】:

以上是关于mySQL如何防止插入,除非两列(字段)的组合是唯一的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过分组两列来防止重复? MYSQL/Codeigniter

mysql中insert与select的嵌套使用解决组合字段插入问题

当插入数据失败时,防止mysql自增长字段的自增长的方法

如何在Mysql中组合两列和group_concat

MySQL:按两列的函数排序

在 MySQL 中插入时检查和防止类似的字符串