我想添加复杂的唯一键到现有的表。键包含4个字段(user_id,game_id,date,time)。 但是表具有非唯一行。 我明白,我可以删除所有重复的日期,并在此之后添加复杂的关键。
user_id
game_id
date
time
也许存在另一个解决方案,而不搜索所有重复的数据。(如添加唯一忽略等)。
我搜索,如何去除重复 mysql 行-我认为这是一个很好的解决方案。 只使用 MySQL 查询删除副本?
创建一个自动增量 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 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
现在,尝试插入一些测试值。