2011-12-19 71 views
1

我有一个包含库组一个CSV文件,它的数据...imort CSV数据到MySQL表

组考虑为表和每个表包含短语识别和短语值...

我想要插入这个CSV数据到两个不同的表使用MySQL我怎么能?

假设我有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 /抗生素警告/ ...是基团

并且每个组包含不同phrases..like Additional_meds包含总共12个记录如见下面。

CSV像enter image description here

+0

您是否使用任何特定的IDE来运行MySQL? – 2011-12-19 12:39:00

+0

是的mysql蟾蜍4.5 – Sweety 2011-12-19 13:08:52

回答

1

做它本身在MySQL中,这应该是更快,消耗更少的ressources。 通过LOAD INFILE语句中的MySQL在MySQL中创建包含从CSV所有字段的表,即,从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 |    | 
| ------------+--------------+------+-----+---------+----------------+ 

加载数据到这个表,即

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 
+0

第一次加载查询插入只有最上面的记录..不是所有的数据 – Sweety 2011-12-19 13:09:39

+0

这'LOAD'语句采取文件中的所有行,也许有一个非良好形成的字段或行终止符 – rabudde 2011-12-19 13:13:43