ker*_*lin 4 mysql ruby-on-rails duplicate-removal has-and-belongs-to-many
我在用户和角色之间有一个HABTM关联.
用户可以是角色的admin(role_id = 1)或用户(role_id = 2).
在连接表,roles_users中,我有一些冗余记录.例如:

我想删除重复的记录,如1:1,2:4.
两个问题:
哪里是执行删除重复的sql脚本的最佳位置 - 迁移?脚本?
什么是删除重复的SQL查询?
Joh*_*hat 12
CREATE TABLE roles_users2 LIKE roles_users; -- this ensures indexes are preserved
INSERT INTO roles_users2 SELECT DISTINCT * FROM roles_users;
DROP TABLE roles_users;
RENAME TABLE roles_users2 TO roles_users;
Run Code Online (Sandbox Code Playgroud)
并为将来防止重复行
ALTER TABLE roles_users ADD UNIQUE INDEX (role_id, user_id);
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过以下步骤一步完成所有操作ALTER TABLE IGNORE:
ALTER IGNORE TABLE roles_users ADD UNIQUE INDEX (role_id, user_id);
IGNORE是标准SQL的MySQL扩展.如果新表中的唯一键上存在重复项,或者启用了严格模式时出现警告,它将控制ALTER TABLE的工作方式.如果未指定IGNORE,则复制将中止并在发生重复键错误时回滚.如果指定了IGNORE,则只使用第一行在唯一键上具有重复项的行.其他冲突的行将被删除.不正确的值将截断为最接近的匹配可接受值.
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |