gpt4 book ai didi

mysql - 修复数据库重复条目(MySQL 错误)

转载 作者:行者123 更新时间:2023-11-29 07:14:33 25 4
gpt4 key购买 nike

我正在使用 MySQL 4.1。一些表具有违反约束的重复条目。

当我尝试对行进行分组时,MySQL 无法将这些行识别为相似的。

例子:

表 A 有一列“名称”,具有 Unique 属性。
该表包含一行,名称为“Hach?”和一行同名但末尾有一个方 block 而不是“?” (我无法在此文本字段中重现)
对这两行的“分组依据”返回 2 个单独的行

这会导致一些问题,包括我无法导出和重新导入数据库。在重新导入错误时提到插入失败,因为它违反了约束。

理论上我可以尝试导入,等待第一个错误,修复导入脚本和原始数据库,然后重复。实际上,这将需要很长时间。

有没有办法列出所有异常或强制数据库重新检查约束(并列出所有违背它们的值/行)?

如果有帮助,我可以提供 .MYD 文件。

最佳答案

列出所有异常:

SELECT name, count(*) FROM TableA GROUP BY name HAVING count(*) > 1;

有几种方法可以解决删除重复项的问题,您的路径将在很大程度上取决于您拥有的重复项数量。

参见 this因此,请问如何从您的表格中删除这些内容。

这是我在那里提供的解决方案:

-- Setup for example
create table people (fname varchar(10), lname varchar(10));

insert into people values ('Bob', 'Newhart');
insert into people values ('Bob', 'Newhart');
insert into people values ('Bill', 'Cosby');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Adam', 'Sandler');

-- Show table with duplicates
select * from people;

-- Create table with one version of each duplicate record
create table dups as
select distinct fname, lname, count(*)
from people group by fname, lname
having count(*) > 1;

-- Delete all matching duplicate records
delete people from people inner join dups
on people.fname = dups.fname AND
people.lname = dups.lname;

-- Insert single record of each dup back into table
insert into people select fname, lname from dups;

-- Show Fixed table
select * from people;

关于mysql - 修复数据库重复条目(MySQL 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com