mysql:在现有表中导入csv

标签 mysql csv phpmyadmin multiple-columns

假设您有一个 CSV 文件,其中仅包含文本且行结尾为 \r\n。 像这样:

abc
def
hij
...
xyz

您想要将此文件导入现有的多列表中,其中每一行文本都需要进入一个特定(当前为空)列(让我们将其命名为needed)的一行 table 。像这样:

|一个 |乙| c |需要|
|foo|bar|baz|______|<-- abc
|foo|bar|baz|______|<-- def
...
|foo|bar|baz|______|<-- xyz

CSV 文件中的数据不需要按特定顺序插入。 needed 的哪个字段包含 CSV 中的哪些数据并不重要,只要导入每一行,一切都很好。

我尝试了很多事情,这让我发疯,但我不知道如何做到这一点。可以使用 LOAD DATA INFILE 和更新/替换/插入命令以某种方式解决这个问题吗?遇到这样的情况你会怎么做?用mysql也可以吗?或者我需要一个自定义的 php 脚本吗?

我希望这个问题足够清楚。如果您有任何不清楚的地方,请询问。

最佳答案

好的,给你...

将新列添加到 stuff人口数量为 1-600,000

ALTER TABLE stuff ADD COLUMN newId INTEGER UNIQUE AUTO_INCREMENT;

为您的 CSV 文件创建临时表

CREATE TABLE temp (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    data VARCHAR(32)
);

我猜测数据所需的长度。

导入到临时表

LOAD DATA INFILE <wherever> INTO TABLE temp;

将数据添加到 stuff

UPDATE stuff AS s
JOIN temp AS t ON t.id=s.newId
SET s.needed=t.data;

整理一下

DROP TABLE temp;
ALTER TABLE stuff DROP COLUMN newId;

我必须承认我还没有测试过 LOAD DATA INFILEUPDATE报表,但我已经检查了所有的表摆弄。特别是,MySQL 将填充 newId包含连续数字的列。

我认为如果 stuff 中的行数不会有问题与 csv 文件中的行数不匹配 - 显然,会有几行带有 needed如果行数少于行数,则仍为 NULL。

关于mysql:在现有表中导入csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126438/

相关文章:

php - Xcode, PHP;使用 SwiftyJSON-master 从 PHP/MySQL 检索数据时遇到问题

magento - 将 .csv 导入 Magento 找不到所需的列 : sku

php - 将 Symfony 实体导出为 CSV

mysql - 文本日期到日期格式 SQL phpmyadmin

mysql - 如何获取指定日期范围内的值?

mysql - 未处理的拒绝 SequelizeConnectionError : ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server

mysql - SQL中的AND语句总是被执行吗?

php - 为什么这些 UPDATE 和 INSERT INTO 查询不起作用? PHP 和 MySQL

python - 打印到 CSV 会导致每个字符之间有一个空格?

php - MySQL 数据库导出 : Allowed memory size of 67108864 bytes exhausted