最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql中如何刪除表重復(fù)數(shù)據(jù)

 更新時間:2023年07月14日 10:22:17   作者:撒拉Hi  
這篇文章主要介紹了Mysql中如何刪除表重復(fù)數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Mysql刪除表重復(fù)數(shù)據(jù)

表里存在唯一主鍵

根據(jù)多個字段刪除重復(fù)數(shù)據(jù),只保留一條數(shù)據(jù)

DELETE
FROM
	table_name 
WHERE
	(字段1, 字段2) IN (
		SELECT
			t.字段1,
			t.字段2
		FROM
			(
				SELECT
					字段1,
					字段2
				FROM
					table_name 
				GROUP BY
					字段1,
					字段2
				HAVING
					count(1) > 1
			) t
	)
AND id NOT IN (
	SELECT
		dt.id
	FROM
		(
			SELECT
				min(id) AS id
			FROM
				table_name 
			GROUP BY
				字段1,
				字段2
			HAVING
				count(1) > 1
		) dt
)

沒有主鍵時刪除重復(fù)數(shù)據(jù)

1、創(chuàng)建新表

①創(chuàng)建一個新表與目標(biāo)表結(jié)構(gòu)字段保持一致

create table new_table_temp

②將過濾查詢的統(tǒng)計的數(shù)據(jù)寫入到新表

insert into new_table_temp

③將舊表table_name 刪除

delete from table_name?

④將創(chuàng)建的新表名稱修改為舊表名稱

2、添加字段

①表結(jié)構(gòu)添加一個自增且唯一字段

②按照存在唯一主鍵進行刪除重復(fù)數(shù)據(jù)

③刪除添加的自增字段

Mysql刪除表中重復(fù)數(shù)據(jù)并保留一條

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

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

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

準(zhǔn)備一張表 用的是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, '測試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
INSERT INTO `message` VALUES (2, '測試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
INSERT INTO `message` VALUES (3, '測試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
INSERT INTO `message` VALUES (4, '測試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
SET FOREIGN_KEY_CHECKS = 1;

創(chuàng)建表并添加四條相同的數(shù)據(jù)

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

CREATE DEFINER=`root`@`localhost` PROCEDURE `remove`()
BEGIN
DECLARE count_all INT DEFAULT 0;
DECLARE count_copy INT DEFAULT 1;
-- 創(chuàng)建一個臨時復(fù)制表,并將目標(biāo)表數(shù)據(jù)復(fù)制進來
DROP TABLE if exists message_01 ;
create TEMPORARY TABLE message_01 (SELECT * FROM message);
-- 查詢?nèi)ブ睾髮嶋H條數(shù) 并賦值給我們的變量 去重根據(jù)實際需求更改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 ;
/*刪除復(fù)制表的重復(fù)數(shù)據(jù)并保留一條  保留哪條數(shù)據(jù)可以自己根據(jù)條件調(diào)節(jié),
比如最小id等等,就是條件問題 還有就是去重根據(jù)實際需求更改GROUP BY 后面條件
這里如果使用了邏輯刪除,有需要保留數(shù)據(jù)的可以改成修改邏輯刪除字段
*/
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
);
-- 再次不去重查詢 如結(jié)果和查詢結(jié)果一樣則操作正確且完整
select COUNT(1) INTO count_copy FROM message_01 WHERE del_flag = 0 ;
-- 進行最后兩次查詢結(jié)果比對
IF count_all = count_copy THEN
TRUNCATE message;
INSERT INTO message (SELECT * FROM message_01);
SELECT 'success';
ELSE 
SELECT '改造失敗',count_all AS '原表條數(shù)',count_copy AS '復(fù)制表刪除重復(fù)數(shù)據(jù)后統(tǒng)計的條數(shù)';
END IF;
END

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

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL備份神器mydumper的原理、實操與恢復(fù)完全指南

    MySQL備份神器mydumper的原理、實操與恢復(fù)完全指南

    數(shù)據(jù)庫備份是將數(shù)據(jù)庫中的數(shù)據(jù)和結(jié)構(gòu)復(fù)制到另一個位置,以便在需要時可以恢復(fù)數(shù)據(jù),MySQL自帶了備份工具mysqldump,可以備份整個數(shù)據(jù)庫或特定的表,這篇文章主要介紹了MySQL備份神器mydumper的原理、實操與恢復(fù)的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • mysql如何對String類型的數(shù)字值排序

    mysql如何對String類型的數(shù)字值排序

    這篇文章主要介紹了mysql如何對String類型的數(shù)字值排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql 5.7.11 winx64初始密碼修改

    mysql 5.7.11 winx64初始密碼修改

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.11 winx64初始密碼修改的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 一個小時學(xué)會MySQL數(shù)據(jù)庫(張果)

    一個小時學(xué)會MySQL數(shù)據(jù)庫(張果)

    當(dāng)前大量的網(wǎng)站使用php語言,那么對應(yīng)的就是mysql數(shù)據(jù)庫,這里就為大家分享一下MySQL數(shù)據(jù)庫的相關(guān)知識,希望大家多多支持腳本之家
    2018-01-01
  • Mysql數(shù)據(jù)庫庫操作大全

    Mysql數(shù)據(jù)庫庫操作大全

    本文介紹了如何在MySQL中創(chuàng)建、備份和修改數(shù)據(jù)庫,以及如何查看和指定數(shù)據(jù)庫的編碼集和校驗集,還涵蓋了對表的操作,包括創(chuàng)建、查看、插入、查詢和刪除表,以及對數(shù)據(jù)的排序,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Linux下Mysql5.6 二進制安裝過程

    Linux下Mysql5.6 二進制安裝過程

    這篇文章主要介紹了Linux下Mysql5.6 二進制安裝過程,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 21條MySQL優(yōu)化建議(經(jīng)驗總結(jié))

    21條MySQL優(yōu)化建議(經(jīng)驗總結(jié))

    這篇文章主要介紹了21條MySQL優(yōu)化建議,均來自個人的實戰(zhàn)經(jīng)驗總結(jié),需要的朋友可以參考下
    2014-07-07
  • 如何查看MySQL數(shù)據(jù)庫中使用的引擎類型

    如何查看MySQL數(shù)據(jù)庫中使用的引擎類型

    MySQL是目前使用最廣泛的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,它支持多種不同的數(shù)據(jù)存儲引擎,以方便地查看MySQL數(shù)據(jù)庫中使用的引擎類型,在實際應(yīng)用中,選擇合適的存儲引擎類型可以提高數(shù)據(jù)庫的性能和穩(wěn)定性,
    2023-10-10
  • MySQL的安裝以及基本的管理命令和設(shè)置

    MySQL的安裝以及基本的管理命令和設(shè)置

    這篇文章主要介紹了MySQL的安裝以及基本的管理命令和設(shè)置,是搭建MySQL環(huán)境的基礎(chǔ),需要的朋友可以參考下
    2015-11-11
  • Linux之MySQL主從復(fù)制方式

    Linux之MySQL主從復(fù)制方式

    本文介紹了MySQL的主從復(fù)制原理和配置步驟,包括主從庫的配置、同步操作和異常處理,主從復(fù)制通過二進制日志實現(xiàn)數(shù)據(jù)同步,適用于讀寫分離和備份等場景,配置過程中需要注意server_id的唯一性,確保主從同步的順利進行
    2024-11-11

最新評論

宁化县| 锡林郭勒盟| 旬邑县| 文水县| 靖边县| 博野县| 呼玛县| 南部县| 华池县| 西藏| 阿拉善右旗| 吉木乃县| 社旗县| 武强县| 衡水市| 枣阳市| 仁化县| 秦皇岛市| 通渭县| 上饶县| 宁陵县| 渝北区| 云阳县| 嘉峪关市| 三穗县| 岳普湖县| 永修县| 江山市| 亳州市| 改则县| 虎林市| 安康市| 栖霞市| 舞钢市| 上饶市| 芦溪县| 平阴县| 斗六市| 阳泉市| 锡林浩特市| 曲阳县|