将CSV数据导入Mysql表

时间:2011-12-19 12:25:23

标签: mysql database csv

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

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

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

假设我有2个表

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 /抗生素警告/ ...是小组

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

csv,如enter image description here

2 个答案:

答案 0 :(得分:1)

在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

答案 1 :(得分:0)

使用:file_get_content()来读取文件。

使用:explode()解析数据,从而获取数组,然后使用你正在使用的任何mysql函数/类进行插入。

请参阅:https://stackoverflow.com/questions/8134967/insert-comma-separated-records-in-table/8135024#8135024 - 有关更多帮助