亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

表里存在唯一主鍵

根據(jù)多個(gè)字段刪除重復(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
)

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

1、創(chuàng)建新表

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

create table new_table_temp

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

insert into new_table_temp

③將舊表table_name 刪除

delete from table_name?

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

2、添加字段

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

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

③刪除添加的自增字段

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

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

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

我這里只做一個(gè)列子,工作代碼安全底線大家謹(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, '測(cè)試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
INSERT INTO `message` VALUES (2, '測(cè)試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
INSERT INTO `message` VALUES (3, '測(cè)試消息', '消息內(nèi)容', 23, 1231, 0, 0, '2022-08-17 10:39:51', 3, '2022-08-17 10:40:00');
INSERT INTO `message` VALUES (4, '測(cè)試消息', '消息內(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ù)

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

CREATE DEFINER=`root`@`localhost` PROCEDURE `remove`()
BEGIN
DECLARE count_all INT DEFAULT 0;
DECLARE count_copy INT DEFAULT 1;
-- 創(chuàng)建一個(gè)臨時(shí)復(fù)制表,并將目標(biāo)表數(shù)據(jù)復(fù)制進(jìn)來(lái)
DROP TABLE if exists message_01 ;
create TEMPORARY TABLE message_01 (SELECT * FROM message);
-- 查詢?nèi)ブ睾髮?shí)際條數(shù) 并賦值給我們的變量 去重根據(jù)實(shí)際需求更改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等等,就是條件問(wèn)題 還有就是去重根據(jù)實(shí)際需求更改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 ;
-- 進(jìn)行最后兩次查詢結(jié)果比對(duì)
IF count_all = count_copy THEN
TRUNCATE message;
INSERT INTO message (SELECT * FROM message_01);
SELECT 'success';
ELSE 
SELECT '改造失敗',count_all AS '原表?xiàng)l數(shù)',count_copy AS '復(fù)制表刪除重復(fù)數(shù)據(jù)后統(tǒng)計(jì)的條數(shù)';
END IF;
END

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

總結(jié)

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

相關(guān)文章

  • 解決Navicat導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)sql報(bào)錯(cuò)datetime(0)的問(wèn)題

    解決Navicat導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)sql報(bào)錯(cuò)datetime(0)的問(wèn)題

    這篇文章主要介紹了解決Navicat導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)sql報(bào)錯(cuò)datetime(0)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • mysql sql99語(yǔ)法 內(nèi)連接非等值連接詳解

    mysql sql99語(yǔ)法 內(nèi)連接非等值連接詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql sql99語(yǔ)法 內(nèi)連接非等值連接的相關(guān)知識(shí)點(diǎn)文章,有需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • Mysql中索引和約束的示例語(yǔ)句

    Mysql中索引和約束的示例語(yǔ)句

    這篇文章主要介紹了Mysql中索引和約束的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2021-01-01
  • 解壓版MYSQL安裝及遇到的錯(cuò)誤及解決方法

    解壓版MYSQL安裝及遇到的錯(cuò)誤及解決方法

    這篇文章主要介紹了解壓版MYSQL安裝及遇到的錯(cuò)誤及解決方法,需要的朋友可以參考下
    2018-11-11
  • MySQL使用explain命令查看與分析索引的使用情況

    MySQL使用explain命令查看與分析索引的使用情況

    這篇文章主要介紹了MySQL使用explain命令查看與分析索引的使用情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL五步走JDBC編程全解讀

    MySQL五步走JDBC編程全解讀

    JDBC是指Java數(shù)據(jù)庫(kù)連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口(?JAVA?API),用來(lái)連接?Java?編程語(yǔ)言和廣泛的數(shù)據(jù)庫(kù)。從根本上來(lái)說(shuō),JDBC?是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問(wèn)到底層數(shù)據(jù)庫(kù),本篇文章我們來(lái)了解MySQL連接JDBC的五步走流程方法
    2022-01-01
  • MySQL pt-slave-restart工具的使用簡(jiǎn)介

    MySQL pt-slave-restart工具的使用簡(jiǎn)介

    這篇文章主要介紹了MySQL pt-slave-restart工具的使用簡(jiǎn)介,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • MySQL binlog_ignore_db 參數(shù)的具體使用

    MySQL binlog_ignore_db 參數(shù)的具體使用

    這篇文章主要介紹了MySQL binlog_ignore_db 參數(shù)的具體作用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-12-12
  • MySQL性能優(yōu)化神器Explain的基本使用分析

    MySQL性能優(yōu)化神器Explain的基本使用分析

    這篇文章主要給大家介紹了關(guān)于MySQL性能優(yōu)化神器Explain的基本使用分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 詳解MySQL數(shù)據(jù)類型DECIMAL(N,M)中N和M分別表示的含義

    詳解MySQL數(shù)據(jù)類型DECIMAL(N,M)中N和M分別表示的含義

    關(guān)于MySQL數(shù)據(jù)類型decimal中n和m分別表示什么含義?本文就此問(wèn)題作了簡(jiǎn)單論述,并創(chuàng)建相關(guān)表進(jìn)行驗(yàn)證,需要的朋友可以了解下。
    2017-10-10

最新評(píng)論