我想将复杂的唯一键添加到现有表中。键包含4个字段( user_id , game_id , date , time ). 但表具有非唯一行。我知道我可以删除所有重复的日期,然后添加复杂的键。可能存在另一个不搜索所有重复数据的解决方案(例如添加唯一忽略等)。我搜索了upd,怎么能删除重复的mysql行-我认为这是一个很好的解决方案。仅使用mysql查询删除重复项?
user_id
game_id
date
time
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列,然后生成一个复合键。
zrfyljdw2#
对于mysql:
ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
sh7euo9m3#
我提供的解决方案是基于您的业务逻辑的假设。在我的设计中,我将允许表只存储一个用户游戏组合的记录。因此,我将向表中添加一个复合键。
PRIMARY KEY (`user_id`,`game_id`)
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填充)。
iyzzxitl5#
在表中设置多个唯一键
ALTER TABLE table_name ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
voase2hg6#
创建一个自动递增id或一个唯一id,并将其添加到您正在讨论的4个字段的自然关键点。这将使表中的每一行都是唯一的。。。
wgmfuz8q7#
正确的语法应该是- ALTER TABLE Table_Name ADD UNIQUE (column_name) 例子
ALTER TABLE Table_Name ADD UNIQUE (column_name)
ALTER TABLE 0_value_addition_setup ADD UNIQUE (`value_code`)
7条答案
按热度按时间yws3nbqq1#
你可以照扬塔尔的建议去做
或
可以添加约束
但我认为,为了不丢失现有数据,可以添加一个indentity列,然后生成一个复合键。
zrfyljdw2#
对于mysql:
sh7euo9m3#
我提供的解决方案是基于您的业务逻辑的假设。在我的设计中,我将允许表只存储一个用户游戏组合的记录。因此,我将向表中添加一个复合键。
bksxznpy4#
我不得不解决一个类似的问题。我从msaccess继承了一个很大的源表,其中有近15000条记录没有主键,我必须对其进行规范化并使cakephp兼容。cakephp的一个约定是,每个表都有一个主键,它是第一列,称为“id”。在MySQL5.5下,下面的简单语句为我实现了这一点:
这在现有数据前面添加了一个integer类型的新列“id”(“first”关键字)。auto\u increment关键字从1开始递增ID。现在,每个数据集都有一个唯一的数字id(没有auto\u increment语句,所有行都用id=0填充)。
iyzzxitl5#
在表中设置多个唯一键
voase2hg6#
创建一个自动递增id或一个唯一id,并将其添加到您正在讨论的4个字段的自然关键点。这将使表中的每一行都是唯一的。。。
wgmfuz8q7#
正确的语法应该是-
ALTER TABLE Table_Name ADD UNIQUE (column_name)
例子