mysql 如何添加唯一键到现有的表(与非唯一行)

yc0p9oo0  于 2023-02-18  发布在  Mysql
关注(0)|答案(8)|浏览(160)

我想添加复杂的唯一键到现有的表。关键字包含从4个字段(user_idgame_iddatetime)。但表有非唯一行。我知道我可以删除所有重复的日期,然后添加复杂的关键字。
可能存在另一个解决方案而不搜索所有重复的数据。(如添加唯一忽略等)。
UPD我搜索,如何可以删除重复的MySQL行-我认为这是很好的解决方案。Remove duplicates using only a MySQL query?

r1zk6ea1

r1zk6ea11#

你可以照安塔尔说的做

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)

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

puruo6ea

puruo6ea2#

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

ALTER TABLE  0_value_addition_setup ADD UNIQUE (`value_code`)
2w3rbyxf

2w3rbyxf3#

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

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

ktecyv1j

ktecyv1j4#

将多个唯一键设置到表中

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

abithluo5#

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

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

sbtkgmzw6#

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

rjee0c15

rjee0c157#

对于MySQL:

ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
p8h8hvxi

p8h8hvxi8#

如果yourColumnName有一些值不是唯一的,现在你想为它添加一个唯一的索引。

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

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

相关问题