MySQL中删除重复的行的方法和操作是什么?
这篇文章我们来了解MySQL中如何删除重复的行,有时候,我们可能会在MySQL数据库中遇到重复的行,因此本文就给大家分享一下删除重复的行的方法,下文有很详细的介绍,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
先决条件
安装了MySQL的系统 MySQL root用户帐户 访问终端窗口/命令行(Ctrl-Alt-T,“搜索”> “终端”) 设置测试数据库
如果您已经可以使用MySQL数据库,请跳至下一部分。
否则,请打开终端窗口并输入以下内容:
mysql –u root –p出现提示时,输入MySQL安装的根密码。如果您具有特定的用户帐户,请使用这些凭据而不是root用户。
系统提示应更改为:
mysql>注意:如果您无法连接到MySQL服务器,则可能会收到一条消息,提示访问已被拒绝。如果需要帮助,请参考我们的文章,该文章关于如何解决此MySQL错误。
创建测试数据库您可以在现有数据库中创建一个新表。为此,通过列出所有现有实例并找到合适的数据库:
SHOW DATABASES;或者,您可以通过输入以下命令来创建新数据库:
CREATE DATABASE IF NOT EXISTS testdata;要开始testdata使用新数据库,请使用:
USE testdata; 添加表和数据进入数据库后,使用以下命令添加包含以下数据的表:
CREATE TABLE dates ( id INT PRIMARY KEY AUTO_INCREMENT, day VARCHAR(2) NOT NULL, month VARCHAR(10) NOT NULL, year VARCHAR(4) NOT NULL ); INSERT INTO dates (day,month,year) VALUES (’29’,’January’,’2011’), (’30’,’January’,’2011’), (’30’,’January’,’2011’), (’14’,’February,’2017’), (’14’,’February,’2018’), (‘23’,’March’,’2018’), (‘23’,’March’,’2018’), (‘23’,’March’,’2019’), (‘29’,’October’,’2019’), (‘29’,’November’,’2019’), (‘12’,’November’,’2017’), (‘17’,’August’,’2018’), (‘05’,’June’,’2016’); 显示日期表的内容要查看按日期排序的所有输入日期的显示,请键入:
SELECT * FROM dates ORDER BY year;输出应以适当的顺序显示日期列表。
显示重复的行要查找测试数据库中是否存在重复的行,请使用以下命令:
SELECT day, COUNT(day), month, COUNT(month), year, COUNT(year) FROM dates GROUP BY day, month, year HAVING COUNT(day) > 1 AND COUNT(month) > 1 AND COUNT(year) > 1;系统将显示所有重复的值。在这种情况下,您应该看到:
此格式可以选择多个列。如果您有一列具有唯一标识符的列,例如联系人列表中的电子邮件地址或单个日期列,则只需从该列中进行选择。
注意:了解在MySQL中查找重复行的其他方法。
删除重复的行在使用下面提到的任何方法之前,请记住您需要在现有数据库中工作。我们将使用示例数据库:
USE testdata; 选项1:使用INNER JOIN删除重复的行要在我们的测试MySQL表中删除重复的行,请输入以下内容:
delete t1 FROM dates t1 INNER JOIN dates t2 WHERE t1.id t2.id AND t1.day = t2.day AND t1.month = t2.month AND t1.year = t2.year;您也可以使用“显示重复行”中的命令来验证删除。
注意:如果您具有唯一的列标识符,则可以将其替换为月,日和年列标识符,而无需使用AND运算符。旨在帮助您删除具有多个相同列的行。
选项2:使用中间表删除重复的行您可以创建一个中间表并将其用于删除重复的行。通过仅将唯一的行传输到新创建的表并删除原始表(剩下的重复行)来完成此操作。
为此,请按照以下说明进行操作。
1.创建一个与源表具有相同结构的中间表,并传输在源表中找到的唯一行:
CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];例如,要创建样本表结构的副本,dates命令为:
CREATE TABLE copy_of_dates SELECT DISTINCT id, day, month, year FROM dates;2.完成后,您可以删除源表并重命名新表:
DROP TABLE [source_table]; ALTER TABLE [copy_of_source] RENAME TO [source_table];例如:
DROP TABLE dates; ALTER TABLE copy_of_dates RENAME TO dates; 选项3:使用ROW_NUMBER()删除重复的行重要说明:此方法仅适用于MySQL8.02及更高版本。尝试此方法之前,请检查MySQL版本。
删除重复行的另一种方法是使用ROW_NUMBER()函数。
SELECT *. ROW_NUMBER () Over (PARTITION BY [column] ORDER BY [column]) as [row_number_name];因此,示例表的命令为:
SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number;结果包括一个row_number列。数据按ID划分,并且在每个分区中都有唯一的行号。唯一值被标以行号1,而重复是2,3,依此类推。
因此,要删除重复的行,您需要删除除标有1的行以外的所有内容。这是通过运行以作为过滤器的DELETE查询来完成的row_number。
要删除重复的行,请运行:
DELETE FROM [table_name] WHERE row_number > 1;在我们的示例日期表中,命令为:
DELETE FROM dates WHERE row_number > 1;输出将告诉您有多少行受到影响,即删除了多少重复的行。
您可以通过运行以下命令来验证没有重复的行:
SELECT * FROM [table_name];例如:
SELECT * FROM dates;总结
现在,您应该能够在MySQL中删除重复的行并提高数据库性能。请记住,MySQL严格模式的新实现限制了所需功能的功能。
关于MySQL中删除重复的行的方法就介绍到这,上述SQL语句具有一定的参考价值,需要的朋友可以了解看看。最后,想要了解更多MySQL数据库的操作,大家可以关注其它的相关文章。文本转载自网络
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MySQL中删除重复的行的方法和操作是什么?
本文地址: https://pptw.com/jishu/652005.html