在项目中,常常要用到联合唯一
在一些配置表中,一些列的组合成为一条记录。
比如,在游戏中,游戏的分区和用户id会形成一条记录。(比如,一个qq用户可以在艾欧尼亚、德玛西亚创建两个账号)
- 添加联合唯一索引
alter table lol_region_user_table add unique index(user_id,game_region);
-- 解释版
alter table 表名 add unique index(字段1,字段2);
但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会返回1062的添加失败信息,告诉你已经有重复的记录了,建立索引失败。
- 我们可以通过这条sql去查询目前重复的记录:
select user_id,game_region,count(*) as count from lol_region_user_table group by user_id,game_region having count>1;
-- 解释版:
select 字段1,字段2,count(*) as count from 表名 group by 字段1,字段2 having count>1;
- 我们可以用下面的操作删除重复条目并创建:
alter ignore table lol_region_user_table add unique index(user_id,game_region);
-- 解释版
alter ignore table 表名 add unique index(字段1,字段2);
它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。
尤其是添加了ignore的这条sql,在建立索引的同时删除了重复数据,相当有用。