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

yAn*_*Tar 58 mysql unique-key

我想在现有表中添加复杂的唯一键.主要从4个领域(包括user_id,game_id,date,time).但是表有非唯一的行.我知道我可以删除所有重复的日期,然后添加复杂的密钥.

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

UPD我搜索过,如何删除重复的mysql行 - 我认为这是很好的解决方案. 仅使用MySQL查询删除重复项?

Igo*_*sky 116

你可以像yAnTar一样建议

ALTER TABLE TABLE_NAME ADD Id INT AUTO_INCREMENT PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

要么

您可以添加约束

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)
Run Code Online (Sandbox Code Playgroud)

但我认为不丢失现有数据,您可以添加一个缩进列,然后创建一个复合键.

  • 正如@challet所提到的,MySQL中的关键词不是IDENTITY而是AUTO_INCREMENT.http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html (4认同)
  • 什么是 IDENTITY 列?除了与 AUTO_INCRMENT 相关的内容之外,我在文档中找不到它的参考:http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html (2认同)
  • 问题被标记为“mysql”,因此解决方案应该适用于该 DBMS (2认同)

rad*_*wer 14

ALTER TABLE ALTER TABLE Table_Name ADD UNIQUE (column_name)ADD UNIQUE( ALTER TABLE Table_Name ADD UNIQUE (column_name) )

  • 虽然这段代码可能有助于解决问题,但它没有解释_why_和/或_how_它回答了这个问题.提供这种额外的背景将大大提高其长期教育价值.请[编辑]您的答案以添加解释,包括适用的限制和假设. (12认同)

小智 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`);
Run Code Online (Sandbox Code Playgroud)

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