MySql中的唯一键

问题描述:

我有一个包含四列的表格:Col1,Col2,Col3和Col4。
Col1,Col2,Col3是字符串,而Col4是带有自动递增的整数主键。现在我的要求是有Col2和Col3的独特组合。MySql中的唯一键

我的意思是说像。

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

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

+0

如果我试图在第2列第3列中插入“VAL3”,和“VAL 2” - 做你的业务规则允许以相反的顺序值的对被视为重复? – 2010-03-12 04:50:56

+0

是的,应该是可以的。 – Vinodtiru 2010-03-12 06:15:08

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

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

这可以用一个命令来完成,例如

ALTER TABLE YourTable ADD UNIQUE (Col2,Col3); 

您可以通过在这些字段上创建唯一索引来完成此操作。

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

从该文档:

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

我会检查这些值作为您的插入逻辑的一部分。在插入之前,喜欢写东西......

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