我想在现有表中添加复杂的唯一键。密钥包含4个字段(user_id
,game_id
,date
,time
)。
但是表有非唯一的行。
我知道我可以删除所有重复的日期,然后添加复杂的密钥。
可能存在另一种解决方案而不搜索所有重复数据。 (比如添加唯一的忽略等)。
UPD 我搜索过,如何删除重复的mysql行 - 我认为这是一个很好的解决方案。 Remove duplicates using only a MySQL query?
答案 0 :(得分:109)
你可以像yAnTar一样建议
ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY
OR
您可以添加约束
ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)
但我认为不会丢失现有数据,您可以添加一个缩进列,然后创建一个复合键。
答案 1 :(得分:13)
ALTER TABLE 0_value_addition_setup
ADD UNIQUE(
value_code
)
答案 2 :(得分: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`);
这增加了一个新列' id'在现有数据前面的整数类型(" FIRST"关键字)。 AUTO_INCREMENT关键字以1开始递增ID。现在每个数据集都有唯一的数字ID。 (如果没有AUTO_INCREMENT语句,则所有行都填充id = 0)。
答案 3 :(得分:3)
我正在为我的解决方案提供关于业务逻辑的假设。在我的设计中,我将允许该表仅存储一个用户 - 游戏组合的记录。所以我将在表格中添加一个复合键。
PRIMARY KEY (`user_id`,`game_id`)
答案 4 :(得分:2)
创建自动增量ID或UNIQUE ID并将其添加到您正在使用4个字段进行讨论的自然键中。这将使表格中的每一行都独一无二......
答案 5 :(得分:0)
将多个唯一键设置为表
ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
答案 6 :(得分:0)
对于MySQL:
ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
答案 7 :(得分:0)
如果 yourColumnName 有一些不唯一的值,现在你想为它添加一个唯一的索引。试试这个:
CREATE UNIQUE INDEX [IDX_Name] ON yourTableName (yourColumnName) WHERE [id]>1963 --1963 is max(id)-1
现在,尝试插入一些存在的值进行测试。
答案 8 :(得分:-1)
请注意只添加一个UNIQUE键,因为它接受多个NULL值。