如何在MySQL中强制复合唯一性?

时间:2009-06-29 16:39:23

标签: sql mysql database-design

我遇到过一种情况,我希望确保表的复合元素是唯一的。例如:

Table (
  id char(36) primary key,
  fieldA varChar(12) not null,
  fieldB varChar(36) not null
)

我不希望fieldA和fieldB成为复合主键,因为它们经常更改,并且'id'用作整个系统的引用。

fieldA和fieldB本身并不是唯一的,但它们的组合必须是唯一的。例如,{{1,Matt,Jones},{2,David,Jones},{3,Matt,Smith}}将是有效数据,但{{1,Matt,Jones},{2,Matt,Jones不会。

3 个答案:

答案 0 :(得分:11)

您可以在两个字段上添加UNIQUE键约束:

ALTER TABLE `table_name` ADD UNIQUE (
`fieldA`,
`fieldB`
);

答案 1 :(得分:7)

在表定义中添加UNIQUE键:

Table (
  id char(36) primary key,
  fieldA varChar(12) not null,
  fieldB varChar(36) not null,
  UNIQUE fieldA_fieldB (fieldA, fieldB)
)

答案 2 :(得分:1)

ALTER Table ADD UNIQUE ( fieldA, fieldB );