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)和索引设计思想小结】

最近的项目中负责server端的东西,涉及到许多数据库方面的内容。 这里就记录下如何对在向数据库插入记录的时候尽量快捷的完成无重复插入。 数据库索引的思想: 数据库中的索引最形象的比喻就是相当于...

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

做项目需要用到联合唯一 例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,需要给user表添加两个字段的联合唯一索引...

MySQL批量插入遇上唯一索引避免方法(避免导入重复数据)

MySQL批量插入遇上唯一索引避免方法(避免导入重复数据)未避免导入重复数据,建议建立唯一索引 防止批量插入时,遇上唯一索引,可以使用以下3种方法避免方法 (一)导入差异数据,忽略重复数据,IGNO...

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

项目中需要用到联合唯一索引: 例如:user表中有user_

oracle创建表创建唯一索引

  • 2009年05月13日 16:28
  • 5KB
  • 下载

不能在具有唯一索引 'RoleNameIndex' 的对象 'dbo.AspNetRoles' 中插入重复键的行

创建角色的时候出现此错误 使用的相关代码为: private static LMIdentityDbContext db; private RoleManagerIdentityR...
  • sxf359
  • sxf359
  • 2016年11月24日 17:44
  • 407

腾讯游戏10大经典案例(一):唯一索引上的重复键

2012/12/20某业务合服后在唯一索引键上出现了重复键现象 mysql> select count(RoleGID) from RoleData_0; +----------------+ | ...

mysql笔记(二)-- 用户登录(一):唯一索引的妙用

一、首先我们用上节课的存储过程对两张表压100万数据(各100万)。   第一表 user_sys我们使用的是InnoDB模式,小卒自己的插入结果是:      第二张表 use...
  • catemo
  • catemo
  • 2016年11月14日 07:30
  • 178

MySQL批量/循环插入遇上唯一索引避免方法

转自http://www.jb51.net/article/33028.htm过程(一) 导入差异数据,忽略重复数据,IGNORE INTO的使用 在MySQL创建表的时候,我们通常创建一个表的时候...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql 给有重复记录的表添加唯一索引
举报原因:
原因补充:

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