旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

MySQL消弭反复行要领步骤【MySQL教程】,MySQL,步骤,方法

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:58评论:0


导读:本文重要引见了MySQL消弭反复行的一些要领,须要的朋侪能够参考下,希望能协助到人人。sql语句/*MySQL消弭反复行的一些要领---ChuMi...
本文重要引见了MySQL 消弭反复行的一些要领,须要的朋侪能够参考下,希望能协助到人人。

sql语句


/*
MySQL 消弭反复行的一些要领
---Chu Minfei
---2010-08-12 22:49:44.660
--援用转载请说明出处:http://blog.csdn.NET/feixianxxx
*/
----------------悉数字段反复------------------------
 --1运用表替换来删除反复项
 create table test_1(id int,value int);
 insert test_1 select 1,2 union all select 1,2 union all select 2,3;
 --竖立一个和源表构造一样的空的暂时表
 create table tmp like test_1;
 --向暂时表插进去不反复的纪录
 insert tmp select distinct * from test_1;
 --删除原表
 drop table test_1;
 --变动暂时表名为目的表
 rename table tmp to test_1;
 --显现
 mysql> select * from test_1;
+------+-------+
| id  | value |
+------+-------+
|  1 |   2 |
|  2 |   3 |
+------+-------+
 --2.增加auto_increment属性列(这个要领只能用于MyISAM或许BDB引擎的表)
 create table test_1(id int,value int) engine=MyISAM;
 insert test_1 select 1,2 union all select 1,2 union all select 2,3;
 alter table test_1 add id2 int not null auto_increment,
 add primary key(id,value,id2);
 select * from test_1;
+----+-------+-----+
| id | value | id2 |
+----+-------+-----+
| 1 |   2 |  1 |
| 1 |   2 |  2 |
| 2 |   3 |  1 |
+----+-------+-----+
  delete from test_1 where id2<>1;
  alter table test_1 drop id2;
  select * from test_1;
  +----+-------+
| id | value |
+----+-------+
| 1 |   2 |
| 2 |   3 |
+----+-------+
-------------------部份字段反复---------------------
--1.加索引的体式格局
 create table test_2(id int,value int);
 insert test_2 select 1,2 union all select 1,3 union all select 2,3;
 Alter IGNORE table test_2 add primary key(id);
 select * from test_2;
 +----+-------+
| id | value |
+----+-------+
| 1 |   2 |
| 2 |   3 |
+----+-------+
 我们能够看到 1 3 这条纪录消逝了 
 我们这里也能够运用Unique束缚 由于有能够列中有NULL值,然则这里NULL就能够多个了..
 --2.团结表删除
 create table test_2(id int,value int);
 insert test_2 select 1,2 union all select 1,3 union all select 2,3;
 delete A from test_2 a join (select MAX(value) as v ,ID from test_2 group by id) b
 on a.id=b.id and a.value<>b.v;
 select * from test_2;
 +------+-------+
| id  | value |
+------+-------+
|  1 |   3 |
|  2 |   3 |
+------+-------+
--3.运用Increment_auto也能够就是上面悉数字段去重的第二个要领
--4.轻易毛病的要领
--有些朋侪能够会想到子查询的要领,我们来实验一下
 create table test_2(id int,value int);
 insert test_2 select 1,2 union all select 1,3 union all select 2,3;
 delete a from test_2 a where exists(select * from test_2 where a.id=id and a.value<value);
 /*ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause*/
 
 现在,您不能从一个表中删除,同时又在子查询中从同一个表中挑选。
 
 
 ------------------删除特定反复行--------------
 --重要经由过程order by +limit 或许直接limit 
 create table test_3(id int,value int);
 insert test_3 select 1,2 union all select 1,3 union all select 1,4 union all select 2,3;
 --这是要保存ID=1 value最小的谁人纪录,删除其他id为的纪录
 delete from test_3 where id=1 order by value desc limit 2;
 select * from test_3;
+------+-------+
| id  | value |
+------+-------+
|  1 |   2 |
|  2 |   3 |
+------+-------+
 假如你只想删除恣意的纪录 保存一条 就能够去掉order by

相干引荐:

php处置惩罚文本文档反复行

关于消弭反复行的细致引见

MySQL怎样消弭反复行的要领剖析

以上就是MySQL消弭反复行要领步骤的细致内容,更多请关注ki4网别的相干文章!

标签:MySQL步骤方法


欢迎 发表评论: