blu*_*ing 6 mysql ignore duplicates mysql-error-1062
我的MySQL中有一个表有重复项.我尝试删除重复项并保留一个条目.我没有主键
我可以通过以下方式找到重复项:
select user_id, server_id, count(*) as NumDuplicates
from user_server
group by user_id, server_id
having NumDuplicates > 1
Run Code Online (Sandbox Code Playgroud)
但无法删除它们:
ALTER IGNORE TABLE `user_server`
ADD UNIQUE INDEX (`user_id`, `server_id`);
Run Code Online (Sandbox Code Playgroud)
甚至SET foreign_key_checks = 0; 不管用.错误代码:1062.密钥'user_id_3'重复输入'142-20'
MySQL版本:5.5.18引擎:InnoDB
还有其他方法吗?
Rei*_*.85 10
这是因为你使用INNO DB,
一个简单的技巧:
set session old_alter_table=1;
ALTER IGNORE TABLE `user_server`
ADD UNIQUE INDEX (`user_id`, `server_id`);
set session old_alter_table=0;
Run Code Online (Sandbox Code Playgroud)
这样做
可能最简单的方法是复制表的结构,将唯一索引添加到新表,然后执行:
INSERT IGNORE INTO new_table SELECT * FROM old_table
Run Code Online (Sandbox Code Playgroud)
要删除重复项(每个副本除外)而不创建临时表,您可以这样做:
ALTER TABLE `user_server` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
DELETE us2 FROM user_server us1
JOIN user_server us2 USING (user_id, server_id)
WHERE us1.id < us2.id;
ALTER TABLE `user_server` DROP `id`;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6532 次 |
| 最近记录: |