插入或更新没有主键的表

xvw2m8pv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(465)

我继承了一个包含基本数据的表,基本上如下所示:

person_id   first   last   activity_date
----------------------------------------
98765       Dan     Jones  2018-06-15
12345       Mary    Smith  2018-07-04
12345       Mary    Smith  2018-07-04
21212       Erin    Mark   2018-08-11

两大挑战是:
它没有主键,并且
可能有重复的行
供应商将提供一个定期更新数据的csv,我需要将其添加到此现有表中。这又带来了两个挑战:
新文件不是表中现有数据的完全替换,并且
新文件可能与表中现有数据的一部分重叠。
例如:

person_id   first   last   activity_date
----------------------------------------
12345       Mary    Smith  2018-07-04
12345       Mary    Smith  2018-07-04
21212       Erin    Mark   2018-08-11
87878       Tom     Davis  2018-08-12

所以问题是,考虑到所有这些挑战,如何更新表?
我的直觉是创建一个重复的表,添加新的数据,然后使用查询来识别重叠和间隙。缺乏一个 EXCEPT mysql中的命令使这成为一个挑战。事实上,可能会有重复的行。
有人能建议我可能需要的sql来识别csv中缺少的行,我需要将这些行插入到数据库中吗?

zqry0prt

zqry0prt1#

如您所述,我将创建一个新的重复表,添加一个自动增量id字段作为主键:

CREATE TABLE table2
    (id int auto_increment primary key,
     `person_id` int,
     `first` varchar(20),
     `last` varchar(20), 
     `activity_date` date)

在此上创建唯一密钥:

alter table table2 add unique key (`person_id`, `first`, `last`, `activity_date`);

然后使用 IGNORE 要跳过所有重复数据:

insert ignore into table2 (`person_id`, `first`, `last`, `activity_date`)
select * from table1

从供应商处获取csv文件时,请使用 LOAD DATA INFILE ,再次与 IGNORE 选项,并且只从数据库中不存在的csv文件导入数据。

相关问题