mysql 给有重复记录的表添加唯一索引

转载 2013年12月03日 10:32:30
不希望数据表中有重复记录的时候我们可以给表添加一个联合唯一索引
例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引:
alter table user add unique index(user_id,user_name);
这样当向表中添加相同记录的时候,会返回1062的添加失败信息。
但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:
alter ignore table user add unique index(user_id,user_name);
它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。

尤其是绿色的那条sql,在建立索引的同时删除了重复数据,相当有用。
查看索引  show index from 数据库表名
alter table 数据库add index 索引名称(数据库字段名称)
PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 
UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE (`column`) 

INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )


FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT ( `column` )

多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
1.普通索引。
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
(1)创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定length,下同。
(2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length)) 
(3)创建表的时候直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;

2.唯一索引。
它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
(2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));

3.主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用ALTER命令。

mysql对于有大量重复数据的表添加唯一索引

例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引: alter tabl...
  • u011493599
  • u011493599
  • 2016年09月09日 09:09
  • 3314

MySql 给表添加一个联合唯一索引

做项目需要用到联合唯一 例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,需要给user表添加两个字段的联合唯一索引...
  • u010349417
  • u010349417
  • 2013年11月21日 18:24
  • 14939

mysql的普通索引,唯一索引,主索引

1、普通索引   普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcol...
  • matiantian666
  • matiantian666
  • 2016年07月10日 20:51
  • 272

mysql为字段添加和删除索引

ALTER TABLE member add INDEX email ALTER TABLE member DROP INDEX email
  • wlzx120
  • wlzx120
  • 2014年07月01日 15:13
  • 11109

mysql 插入去重,以及设置联合唯一索引问题

最近在开发中遇到一个这样的问题:                   从340万条数据中查找出三个字段是重复的值,然后删除这些重复的字段值并保留一条。其实这个功能在mysql中已经有...
  • dongheli
  • dongheli
  • 2015年08月14日 18:45
  • 1346

mysql 给表添加一个联合唯一索引

项目中需要用到联合唯一索引: 例如:user表中有user_
  • wq7570875
  • wq7570875
  • 2014年05月12日 14:11
  • 44340

mysql 创建唯一索引前 删除重复数据只保留id最小一条。

首先,现在的需求是:  表A有5个字段A1,A2,A3,A4,A5。  现在的唯一索引是A1+A2;因为业务的调整,需要改成A3+A4。 解决办法:  1、第一步很简单,先drop掉原un...
  • ahzxj2012
  • ahzxj2012
  • 2016年12月12日 19:32
  • 216

informix对某表上某个字段不能创建唯一性索引也不能删除索引 错误State:S0011

在informix上的某个表创建索引的时候,如果在创建该索引的时候提示索引已经存在,于是,就尝试删除该索引,但是执行drop index xxx 的时候,却报异常提示信息如下: Error: Ind...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013年12月05日 10:03
  • 2195

mysql 建立索引 唯一索引(转)

转自:http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=7917 不希望数据表中有重复记录的时候我们可以给表添加一个联合唯一索引 ...
  • mr_orange_klj
  • mr_orange_klj
  • 2015年01月16日 15:33
  • 1314

mysql如何添加一个表的外键

1:创建一个父表,主键作为子表的外键: 1 create table province( 2 pId int primary key auto_increment, 3 pNam...
  • Biexiansheng
  • Biexiansheng
  • 2017年08月21日 16:26
  • 698
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql 给有重复记录的表添加唯一索引
举报原因:
原因补充:

(最多只允许输入30个字)