如何将唯一键添加到现有表(具有非uniques行)

jw5wzhpr  于 2021-06-21  发布在  Mysql
关注(0)|答案(7)|浏览(358)

我想将复杂的唯一键添加到现有表中。键包含4个字段( user_id , game_id , date , time ). 但表具有非唯一行。我知道我可以删除所有重复的日期,然后添加复杂的键。
可能存在另一个不搜索所有重复数据的解决方案(例如添加唯一忽略等)。
我搜索了upd,怎么能删除重复的mysql行-我认为这是一个很好的解决方案。仅使用mysql查询删除重复项?

yws3nbqq

yws3nbqq1#

你可以照扬塔尔的建议去做

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)

但我认为,为了不丢失现有数据,可以添加一个indentity列,然后生成一个复合键。

zrfyljdw

zrfyljdw2#

对于mysql:

ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
sh7euo9m

sh7euo9m3#

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

PRIMARY KEY (`user_id`,`game_id`)
bksxznpy

bksxznpy4#

我不得不解决一个类似的问题。我从msaccess继承了一个很大的源表,其中有近15000条记录没有主键,我必须对其进行规范化并使cakephp兼容。cakephp的一个约定是,每个表都有一个主键,它是第一列,称为“id”。在MySQL5.5下,下面的简单语句为我实现了这一点:

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

这在现有数据前面添加了一个integer类型的新列“id”(“first”关键字)。auto\u increment关键字从1开始递增ID。现在,每个数据集都有一个唯一的数字id(没有auto\u increment语句,所有行都用id=0填充)。

iyzzxitl

iyzzxitl5#

在表中设置多个唯一键

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

voase2hg6#

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

wgmfuz8q

wgmfuz8q7#

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

ALTER TABLE  0_value_addition_setup ADD UNIQUE (`value_code`)

相关问题