0

我有一个包含四列的表:Col1、Col2、Col3 和 Col4。
Col1、Col2、Col3 是字符串,Col4 是具有 Auto Increment 的整数主键。现在我的要求是 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 必须是主键。请让我知道一种方法,我可以在我的桌子上同时拥有这两种方法。

4

3 回答 3

1

您可以通过在这些字段上创建唯一索引来做到这一点。

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

从那个文档:

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

于 2010-03-12T04:18:19.373 回答
1

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

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

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

ALTER TABLE YourTable ADD UNIQUE (Col2,Col3);
于 2010-03-12T04:21:05.830 回答
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
于 2010-03-12T04:23:00.313 回答