我有一个包含四列的表: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必须是主要的。请让我知道一种方法,我可以在我的桌子上同时拥有这两种方法。
答案 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