问题:在已经存在的许多数据的库中想要加入一个唯一键,这时候如果直接加mysql会报一个已存在重复建不能加入唯一键的 异常;
搜了搜,发现说可以用
ALTER IGNORE TABLE `a` ADD UNIQUE `idx_companyId_name_type` (`company_id`, `name`,`type`);
这个方法忽略掉重复键
实际操作后发现还是会报错
原因 :5.7版本以后,alter table 这个关键字已经不能加入ignore了;说是破坏了什么原则;
解决方法:
create TABLE b LIKE a
CREATE UNIQUE INDEX idx_companyId_name_type ON b (company_id,name,type)
insert IGNORE into b SELECT * from a
rename TABLE a to a_history
rename TABLE b to a
1.先建一个临时表b
2.在b表上新建需要的唯一键
3.insert的ignore可以用,用这种方法把a表数据导入到b中,如果仔细看affected会变少
4.交换名字 (如果没啥问题 a_history就删除了吧)