电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Mysql中如何刪除表重復數據

瀏覽:52日期:2023-06-08 19:37:37
目錄Mysql刪除表重復數據表里存在唯一主鍵沒有主鍵時刪除重復數據Mysql刪除表中重復數據并保留一條準備一張表 用的是mysql8 大家自行更改創建表并添加四條相同的數據總結Mysql刪除表重復數據表里存在唯一主鍵

根據多個字段刪除重復數據,只保留一條數據

DELETEFROMtable_name WHERE(字段1, 字段2) IN (SELECTt.字段1,t.字段2FROM(SELECT字段1,字段2FROMtable_name GROUP BY字段1,字段2HAVINGcount(1) > 1) t)AND id NOT IN (SELECTdt.idFROM(SELECTmin(id) AS idFROMtable_name GROUP BY字段1,字段2HAVINGcount(1) > 1) dt)沒有主鍵時刪除重復數據

1、創建新表

①創建一個新表與目標表結構字段保持一致

create table new_table_temp

②將過濾查詢的統計的數據寫入到新表

insert into new_table_temp

③將舊表table_name 刪除

delete from table_name?

④將創建的新表名稱修改為舊表名稱

2、添加字段

①表結構添加一個自增且唯一字段

②按照存在唯一主鍵進行刪除重復數據

③刪除添加的自增字段

Mysql刪除表中重復數據并保留一條

最近有個需求,給角色添加菜單權限,這是一個role_menu 表。

里面存放的是角色id和菜單id,是批量給一種類型角色添加,但有可能角色人為添加過,因為數據量還是比較大的,如果先查詢這個有沒有添加過再添加會很耗時,而統一不管有沒有添加過一并添加則很快,這就需要后續給重復數據給刪除掉,于是有了今天的分享。

我這里只做一個列子,工作代碼安全底線大家謹記哈。

準備一張表 用的是mysql8 大家自行更改/* Navicat Premium Data Transfer Source Server : localmysql Source Server Type : MySQL Source Server Version : 80030 Source Host : localhost:3306 Source Schema : nie_db Target Server Type : MySQL Target Server Version : 80030 File Encoding : 65001 Date: 17/08/2022 10:49:41*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for message-- ----------------------------DROP TABLE IF EXISTS `message`;CREATE TABLE `message` ( `id` bigint(0) NOT NULL, `message_title` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, `message_context` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, `send_peo` bigint(0) NULL DEFAULT NULL, `receive_peo` bigint(0) NULL DEFAULT NULL, `scope` int(0) NULL DEFAULT 0, `del_flag` tinyint(0) NULL DEFAULT 0, `create_time` datetime(0) NULL DEFAULT NULL, `creator` tinyint(0) NULL DEFAULT NULL, `update_time` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of message-- ----------------------------INSERT INTO `message` VALUES (1, '測試消息', '消息內容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');INSERT INTO `message` VALUES (2, '測試消息', '消息內容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');INSERT INTO `message` VALUES (3, '測試消息', '消息內容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');INSERT INTO `message` VALUES (4, '測試消息', '消息內容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');SET FOREIGN_KEY_CHECKS = 1;創建表并添加四條相同的數據

接下來是我們這次的重頭,我封裝了一個存儲過程,具體的邏輯都在注釋里了,你也可以分析然后單獨拿出來分批次執行sql

CREATE DEFINER=`root`@`localhost` PROCEDURE `remove`()BEGINDECLARE count_all INT DEFAULT 0;DECLARE count_copy INT DEFAULT 1;-- 創建一個臨時復制表,并將目標表數據復制進來DROP TABLE if exists message_01 ;create TEMPORARY TABLE message_01 (SELECT * FROM message);-- 查詢去重后實際條數 并賦值給我們的變量 去重根據實際需求更改GROUP BY 后面條件SELECT COUNT(1) into count_all from (select COUNT(1) FROM message WHERE del_flag = 0 GROUP BY message_title,message_context) t ;/*刪除復制表的重復數據并保留一條 保留哪條數據可以自己根據條件調節,比如最小id等等,就是條件問題 還有就是去重根據實際需求更改GROUP BY 后面條件這里如果使用了邏輯刪除,有需要保留數據的可以改成修改邏輯刪除字段*/DELETE FROM message_01 WHERE ID NOT IN (select t.id FROM (select MAX(id) as id FROM message WHERE del_flag = 0 GROUP BY message_title,message_context) t);-- 再次不去重查詢 如結果和查詢結果一樣則操作正確且完整select COUNT(1) INTO count_copy FROM message_01 WHERE del_flag = 0 ;-- 進行最后兩次查詢結果比對IF count_all = count_copy THENTRUNCATE message;INSERT INTO message (SELECT * FROM message_01);SELECT 'success';ELSE SELECT '改造失敗',count_all AS '原表條數',count_copy AS '復制表刪除重復數據后統計的條數';END IF;END

另外創建存儲過程,就是再函數那里右鍵 -》過程-》輸入名字-》完成 ,你也可以百度下怎么創建的,我這里就不說太多啦。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: MySQL 數據庫
主站蜘蛛池模板: 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 破碎机锤头_耐磨锤头_合金锤头-鼎成机械一站式耐磨铸件定制服务 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 深圳法律咨询【24小时在线】深圳律师咨询免费 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」| 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 新车测评网_网罗汽车评测资讯_汽车评测门户报道 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 代做标书-代写标书-专业标书文件编辑-「深圳卓越创兴公司」 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 番茄畅听邀请码怎么输入 - Dianw8.com| 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 公交驾校-北京公交驾校欢迎您! 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 最新电影-好看的电视剧大全-朝夕电影网 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 |