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

我想添加复杂的唯一键到现有的表。键包含4个字段(user_idgame_iddatetime)。 但是表具有非唯一行。 我明白,我可以删除所有重复的日期,并在此之后添加复杂的关键。

也许存在另一个解决方案,而不搜索所有重复的数据。(如添加唯一忽略等)。

我搜索,如何去除重复 mysql 行-我认为这是一个很好的解决方案。 只使用 MySQL 查询删除副本?

220208 次浏览

创建一个自动增量 id 或 UNIQUE id,并将其添加到您正在讨论的4个字段的自然键中。这将使表中的每一行都是唯一的..。

你可以按照 yAnTar 的建议去做

ALTER TABLE TABLE_NAME ADD Id INT AUTO_INCREMENT PRIMARY KEY

或者

可以添加约束

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

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

我提供我的解决方案的假设与您的业务逻辑。基本上在我的设计,我将允许表存储一个用户游戏组合只有一个记录。因此,我将向表中添加一个复合键。

PRIMARY KEY (`user_id`,`game_id`)

我不得不解决一个类似的问题。我从 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填充)。

正确的语法应该是 -ALTER TABLE Table_Name ADD UNIQUE (column_name)

例子

ALTER TABLE  0_value_addition_setup ADD UNIQUE (`value_code`)

将多个唯一键设置为表

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

对于 MySQL:

ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;

如果 yourColumnName 有一些不唯一的值,现在您想为它添加唯一的索引,请尝试这样做:

CREATE UNIQUE INDEX [IDX_Name] ON yourTableName (yourColumnName) WHERE [id]>1963 --1963 is max(id)-1

现在,尝试插入一些测试值。