2011-05-06 28 views
2

当您使字段唯一时,它只能插入一次。有没有办法让两个字段在一起使用时是唯一的,还是有一种SQL语法可以让我做到这一点?SQL:防止两次插入项目的组合

我有一个userID和一个itemNr。用户可以根据自己的需要选择尽可能多的项目编号,并且只需插入即可。这意味着我无法将它们设置为UNIQUE。

但是,我想防止相同的组合在数据库中两次。

我知道如何以编程方式执行它(先选择一个项目,然后检查它是否与要插入的项目匹配,如果是,则更新它)。

使用直接SQL语法是否有更优雅的方法?我使用MySQL。

回答

4

您可以用复合唯一约束做到这一点:

alter table your_table 
    add constraint your_unique_key unique (col1, col2) 
/
+0

谢谢,完美的作品。我知道有一个更优雅的方式来做到这一点。 – 2011-05-06 17:05:34

1

不是简单地将每一列定义为唯一的(将每一列设置为独立唯一),而是声明一个“化合物唯一键”,其中两个或多个列值的组合必须在表的所有行中唯一。基本语法是:

ALTER myTable ADD CONSTRAINT myTable_Unique_ColumnA_ColumnB UNIQUE (ColumnA, ColumnB) 
+0

我相信没有'对于ALTER TABLE NONCLUSTERED'修改MySQL中 – 2011-05-06 16:55:24

0

这是通过独特的约束完成的。例如,如果您的表名为table1,则可以这样做:

alter table table1 add constraint c1 unique(userID,itemNr);

+0

感谢您的帮助奥拉夫。 – 2011-05-06 17:06:03