mysql - 导入CSV数据到Mysql表

标签 mysql database csv

我有一个包含库组及其数据的 csv 文件...

组视为工作表,每个工作表包含短语名称和短语值...

我想使用 mysql 将此 csv 数据插入到两个不同的表中,我该怎么做?

假设我有两张 table

phrase_library_group
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| GROUP_ID    | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| GROUP_NAME  | varchar(100) | NO   |     | NULL    |                |
| ------------+--------------+------+-----+---------+----------------+

phrase_list
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| PHRASE_ID   | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| PHRASE_NAME | varchar(100) | NO   |     | NULL    |                |
| PHRASE_DESC | varchar(500) | NO   |     | NULL    |                |
| GROUP_ID    | bigint(20)   | NO   | MUL | NULL    |                |
| ------------+--------------+------+-----+---------+----------------+

图片中的 Additional_meds/Antibiotic Warnings/... 是组

并且每个组包含不同的短语..like Additional_meds 包含总共 12 条记录,如下所示。

csv 类似 enter image description here

最佳答案

在 MySQL 中本地执行,这应该更快并且消耗更少的资源。 在 MySQL 中创建一个包含 CSV 中所有字段的表,即

tmp_phrases
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| GROUP_NAME  | varchar(100) | NO   |     | NULL    |                |
| PHRASE_NAME | varchar(100) | NO   |     | NULL    |                |
| PHRASE_DESC | varchar(500) | NO   |     | NULL    |                |
| ------------+--------------+------+-----+---------+----------------+

通过 MySQL 中的 LOAD INFILE 语句将数据从 CSV 加载到此表中,即

LOAD DATA INFILE '~/phrases.csv' INTO TABLE tmp_phrases FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';

之后,您可以使用两个 INSERT 语句拆分数据。

INSERT INTO phrase_library_group (GROUP_NAME)
    SELECT DISTINCT GROUP_NAME FROM tmp_phrases

INSERT INTO phrase_list (PHRASE_NAME,PHRASE_DESC,GROUP_ID)
    SELECT x.PHRASE_NAME,x.PHRASE_DESC,y.GROUP_ID
    FROM tmp_phrases x
    INNER JOIN phrase_library_group y ON x.GROUP_NAME=y.GROUP_NAME

关于mysql - 导入CSV数据到Mysql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8561341/

相关文章:

mysql - 如何在同一个表格单元格上执行 2 个唯一的 LEFT JOIN?

java - 为什么刷新实体管理器时数据库没有更新?

database - 为什么不能以这种方式将图像保存到数据库?

c - 将 CSV 文件读取到结构数组

mysql - Node.js 和让 db-mysql 工作

mysql - Drupal 不能安装在以默认设置运行的 MySQL 服务器上吗?

bash - ASCII 文件,如何处理带引号的字符串中的分隔符?

java - 如何通过csv-spring读取队列而不是arrayList?

Php 插入/更新多行,使用数组而不是 foreach

database - 推荐一个免费的通用数据库浏览器?