从 CSV 文件导入数据,无需先在 MySQL 中创建表

Ano*_*oop 2 mysql

我想将 CSV 数据导入 mysql 数据库。

另外,我不想先创建表然后再导入。这意味着,如果我的 csv 文件名是 test.csv,它的内容就像

customer_ID,name
10000000,name1
10000001,name2
Run Code Online (Sandbox Code Playgroud)

我应该被执行

mysql> use database {database_name}
mysql> {some_command} test.csv
Run Code Online (Sandbox Code Playgroud)

我应该能够创建具有名称的表test,并有头它customer_IDname它应该根据test.csv的内容填充。特别some_command是我正在寻找的灵丹妙药。

知道如何在 MySQL 中完成此操作。当我搜索时,我没有找到一种无需先创建表就可以导入 CSV 数据的方法。

Flo*_*Doe 5

使用 MySQL 自己的工具无法做到这一点。如果您仔细观察,您必须首先创建表,您必须为 csv 文件的字段、可能的索引等指定数据类型。MySQL 无法预测您要使用哪种数据类型,因此这里有一些手动工作要做。

另一方面,您可以使用外部脚本来存档您想要的内容,一个快速而肮脏的示例是:

#!/bin/bash
# create table for import
head -1 test.csv | awk '{split($0,f,","); printf "create table test (%s INT, %s VARCHAR(50));",f[1],f[2]}' | mysql -u USER -pPASS SCHEMA
# import csv
mysql -uUSER -pPASS SCHEMA -e "LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE testcsv FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES"
Run Code Online (Sandbox Code Playgroud)

上面的“脚本”留下了足够的优化空间,它应该只给你一个基本的想法,如何使用常用的 Linux 工具归档你需要的东西。

  • 是的,我完全理解你在这里的意思,但是你无法单独使用 mysql 来做到这一点。例如,mysql 如何知道哪种数据类型是合适的?一个 csv 文件可以看作是一个数据文件,你缺少的是表的正确模式定义。您当然可以动态地编写脚本,但没有外部工具就无法做到这一点。 (2认同)