如何向现有表添加唯一键(具有非唯一行)

问题描述 投票:54回答:7

我想在现有表中添加复杂的唯一键。密钥包含4个字段(user_idgame_iddatetime)。但是表有非唯一的行。我知道我可以删除所有重复的日期,然后添加复杂的密钥。

可能存在另一种解决方案而不搜索所有重复数(比如添加唯一的忽略等)。

UPD我搜索过,如何删除重复的mysql行 - 我认为这是很好的解决方案。 Remove duplicates using only a MySQL query?

mysql unique-key
7个回答
109
投票

你可以像yAnTar一样建议

ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY

要么

您可以添加约束

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)

但我认为不丢失现有数据,您可以添加标识列,然后创建复合键。


13
投票

ALTER TABLE 0_value_addition_setup ADD UNIQUE(value_code


10
投票

我不得不解决类似的问题。我从MS Access继承了一个大型源表,其中包含近15000个没有主键的记录,我必须将其标准化并使CakePHP兼容。 CakePHP的一个约定是每个表都有一个主键,它是第一列,它被称为'id'。以下简单的声明在MySQL 5.5下为我做了诀窍:

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);

这在现有数据(“FIRST”关键字)前面添加了一个类型为整数的新列“id”。 AUTO_INCREMENT关键字以1开始递增ID。现在每个数据集都有唯一的数字ID。 (如果没有AUTO_INCREMENT语句,则所有行都填充id = 0)。


3
投票

我正在为我的解决方案提供关于业务逻辑的假设。在我的设计中,我将允许该表仅存储一个用户 - 游戏组合的记录。所以我将向表中添加一个复合键。

PRIMARY KEY (`user_id`,`game_id`)

2
投票

创建自动增量ID或UNIQUE ID并将其添加到您正在使用4个字段进行讨论的自然键。这将使表中的每一行都独一无二......


0
投票

将多个唯一键设置到表中

ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);

-1
投票

请注意只添加一个UNIQUE键,因为它接受多个NULL值。

© www.soinside.com 2019 - 2024. All rights reserved.