场景: MySQL 表中的重复行可能由多种来源引起,包括数据输入错误。 删除这些重复项对于维护数据完整性和最佳数据库性能至关重要。
问题:挑战在于删除每个重复行中除一个实例之外的所有实例。
解决方法及注意事项:
重要提示:在执行任何 DELETE 查询之前始终备份表。 错误执行的 DELETE 语句可能会导致不可逆转的数据丢失。
方法一:保留ID最小的行
此方法保留 ID 值最小的行:
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>
方法2:保留ID最大的行
此替代方案保持具有最大 ID 值的行:
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>
提高大型表的效率:
对于非常大的表,以下INSERT ... SELECT DISTINCT
方法提供了更有效的解决方案:
<code class="language-sql">CREATE TEMPORARY TABLE tempTableName AS SELECT DISTINCT cellId, attributeId, entityRowId, value FROM tableName; TRUNCATE TABLE tableName; INSERT INTO tableName SELECT * FROM tempTableName; DROP TEMPORARY TABLE tempTableName;</code>
这将创建一个仅包含唯一行的临时表,截断原始表,然后使用临时表中的唯一数据填充它。 对于大型数据集,这通常比使用 DELETE
更快。 请记住将 tableName
、cellId
、attributeId
、entityRowId
和 value
替换为您的实际列名称。
以上是如何在保留单个实例的同时有效地从 MySQL 表中删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!