文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>mysql表去掉重复记录方法总结

mysql表去掉重复记录方法总结

时间:2011-01-29  来源:sunss

CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `test`;

/*Table structure for table `test` */

DROP TABLE IF EXISTS `test`;

CREATE TABLE `test` (
`id`
int(11) NOT NULL AUTO_INCREMENT,
`name`
char(20) DEFAULT NULL COMMENT '姓名',
`age`
tinyint(4) DEFAULT NULL COMMENT '年龄',
`mate`
tinyint(4) DEFAULT '1' COMMENT '有无配偶(1-有 0-无)',
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_age` (`age`)
) ENGINE
=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

现有记录:

insert  into `test`(`id`,`name`,`age`,`mate`) values (2,'aaaaa',28,0),
(
3,'bbbb',23,0),
(
4,'cccc',25,1),
(
5,'dddd',26,0),
(
6,'eeee',24,0),
(
7,'fffff',18,0),
(
8,'eeee',40,1),
(
9,'eeee',60,1);

想去掉name重名的记录,方法如下:

  1. 给name字段修改成唯一索引:
drop index idx_name on test;
alter table test add unique index (name);

这样当向表中添加相同记录的时候,会返回1062的添加失败信息。
但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:

alter ignore table test add unique idx_name (name);

它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。

    2.重建表方法一:

创建另外一个表,为了防止原来的表结构丢失,可以先创建一个这样的“临时表”,

USE `test`;

/*Table structure for table `test` */

DROP TABLE IF EXISTS `uniq_test`;

CREATE TABLE `uniq_test` (
`id`
int(11) NOT NULL AUTO_INCREMENT,
`name`
char(20) DEFAULT NULL COMMENT '姓名',
`age`
tinyint(4) DEFAULT NULL COMMENT '年龄',
`mate`
tinyint(4) DEFAULT '1' COMMENT '有无配偶(1-有 0-无)',
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_age` (`age`)
) ENGINE
=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

从test表中查找数据,添加到uniq_test中:

insert into uniq_test select * from test group by name;
drop table test;
rename table uniq_
test to test;

总结:

第一种方法适合小表,大表重新建唯一索引的话时间很长,大表适合用第二种方法。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载