是的,MySQL提供了这样做的能力。
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
我不知道你在使用这个表,但它听起来像这个唯一的键可能是一个强大的候选人的主键的表。主键也是自动的唯一键。如果您决定将其设置为主键,请执行以下操作:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(如果您收到一条错误消息,说明已经有主键,那么请执行ALTER TABLE MyTable DROP PRIMARY KEY,然后重复上述命令。)
编辑:响应用户评论
对于唯一键所覆盖的列,不能有多行具有相同的非NULL值。因此,例如,您不能有两行,其中group_id = 0和user_id = 5。 0是一个值。但是,如果使一个或两个列为空,则可以有多个与NULL的位置相同的行。因此,您可以有两个(或更多)行,其中group_id为NULL AND user_id = 1234。
条款:以上是常见的MySQL存储引擎(MyISAM和InnoDB)。 MySQL有存储引擎,其中NULL被视为一个唯一的值,但你可能不使用它们。
如果使一个或两个列为可空,那么唯一键不能是主键 – 主键必须在非空的列上。
让我们假设你把这个键作为主键,现在你想在group_id列中允许NULL。我不知道当前是什么数据类型group_id;我将假设它目前INT UNSIGNED NOT NULL,但你必须修改以下如果不是这个。您将无法再使用此键作为主键。这是一个命令,你可以运行,以进行所需的更改:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)