我正在尝试使用以下查询将 CSV 数据上传到 MYSQL 表。它运行成功。 CSV 文件有 2000 万条数据。但现在我仍然在上传数据时遇到问题。
我的 CSV 文件结构如下:
Name phone_no DND
xxx 99934034343 A
xxx 99934034345 D
xxx 99934034346 A
xxx 99934034347 D
我想仅使用以下命令插入事件的“A”。
LOAD DATA LOCAL INFILE '/root/782012_23.csv'
INTO TABLE tbl_dndno
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';
预期记录是这样的
Name phone_no DND
xxx 99934034343 A
xxx 99934034346 A
最佳答案
我猜你的命令工作正常,但是用 4 行而不是预期的 2 行填充你的表。
LOAD DATA IN FILE documentation似乎不支持您所要求的内容,它只能按数字排除行,因此,如果您在创建此 csv 文件时有办法知道行号,则可以使用此功能。否则有 2 个解决方法:
您可以在加载文件(在 mysql 之外)之前使用(在 Linux 上)过滤文件
grep "D$" /root/782012_23.csv > filteredfile; LOAD DATA LOCAL INFILE 'filteredfile' ...
或者通过SQL加载后过滤:
your_command;mysql -u user -ppassword "DELETE FROM yourtable WHERE DND = 'A'";
关于mysql - 使用过滤器上传 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42531728/