MySql中的唯一键

时间:2010-03-12 04:15:09

标签: sql mysql mysql5

我有一个包含四列的表:Col1,Col2,Col3和Col4 Col1,Col2,Col3是字符串,Col4是具有自动增量的整数主键。现在我的要求是拥有Col2和Col3的独特组合。

我的意思是说。

Insert into table(Col1, Col2, Col3) Values ('val1', 'val2', 'val3');
Insert into table(Col1, Col2, Col3) Values ('val4', 'val2', 'val3');

第二个语句必须抛出错误,因为表中存在'val2','val3'的相同组合。但我不能把它作为主键,因为我需要一个自动增量列,因此col4必须是主要的。请让我知道一种方法,我可以在我的桌子上同时拥有这两种方法。

3 个答案:

答案 0 :(得分:1)

您可以通过在这些字段上创建唯一索引来实现此目的。

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

从该文件:

UNIQUE索引创建一个约束,使索引中的所有值必须是不同的。如果您尝试添加具有与现有行匹配的键值的新行,则会发生错误。此约束不适用于除BDB存储引擎之外的NULL值。对于其他引擎,UNIQUE索引允许包含NULL的列的多个NULL值。如果为UNIQUE索引中的列指定前缀值,则列值必须在前缀中唯一。

答案 1 :(得分:1)

您可以在数据库架构中设置两个或多个键组合唯一的要求。这可以在这里找到:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

这可以通过诸如

之类的命令来完成
ALTER TABLE YourTable ADD UNIQUE (Col2,Col3);

答案 2 :(得分:0)

我会检查这些值作为插入逻辑的一部分。在插入之前,写下类似......

的内容
if exists
    select 1 from table
    where col2 = inputCol2 and col3 = inputCol3
then -- combo already exists
    do nothing / set error
else -- combo doesnt exist yet
    insert into table