2016-11-10 24 views
1

我试图将GTFS文件(以逗号分隔的文本文件)加载到MySQL数据库。 MySQL Workbench导入向导不起作用。我将agency.txt文件复制到agency.csv并使用向导进行选择。经历了所有的步骤;一切都是绿色的复选标记,但它说'末尾输入0记录'。没有错误,没有警告。 我使用mysql shell。 这是我的文件:将逗号分隔的文本文件加载到MySQL:无法正常工作

>>head -2 agency.csv 
agency_name,agency_url,agency_timezone,agency_lang,agency_phone,agency_fare_url 
Chicago Transit Authority,http://transitchicago.com,America/Chicago,en,1-888-YOURCTA,http://www.transitchicago.com/travel_information/fares/default.aspx 

这是我的SQL脚本创建一个表并加载数据:

CREATE TABLE agency (
    agency_name VARCHAR(255) character set utf8, 
    agency_id VARCHAR(255) character set utf8, 
    agency_url VARCHAR(255) character set utf8, 
    agency_timezone VARCHAR(255) character set utf8 
); 
LOAD DATA LOCAL INFILE '/cta/agency.csv' INTO TABLE agency 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(agency_name,@vagency_id,agency_url,agency_timezone) 
SET agency_id = IF(agency_id IS NULL, agency_name, @vagency_id); 

,这就是被装载到表:

mysql> select * from agency; 
+---------------------------+---------------------------+----------------------------+-----------------+ 
| agency_name    | agency_id     | agency_url     | agency_timezone | 
+---------------------------+---------------------------+----------------------------+-----------------+ 
| Chicago Transit Authority | Chicago Transit Authority | America/Chicago   | en    | 

请注意,表中的Agency_url是America/Chicago(时区不是网址)。

我对sql技术并不是很有经验,但我认为把数据放到数据库中应该不那么困难。有人能告诉我 1.为什么会发生这种情况? 2.如何解决?

回答

0

指的是在设置实际值之前,SET子句中的agency_id列。因此,它是NULL导致第二列被分配第一列的值。你的代码改成这样:

SET agency_id = IF(@vagency_id IS NULL, agency_name, @vagency_id); 
        ^^^ DON'T use agency_id here 

全码:

LOAD DATA LOCAL INFILE '/cta/agency.csv' INTO TABLE agency 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(agency_name, @vagency_id, agency_url, agency_timezone) 
SET agency_id = IF(@vagency_id IS NULL, agency_name, @vagency_id); 
+0

嘿@Tim感谢您的回答。你的建议查询并没有做我想要的。此时间代理网址位于agency_id字段中。 – melis

+0

顺便说一下,agency_id是GTFS中的一个可选字段。我想使用agency_id字段作为代理和路由表之间的外键。这就是我试图设置agency_id的原因。 – melis

+0

'这个时间机构的网址是在agency_id字段中。“......我不明白这是怎么可能的。你确定你发布了实际的查询和数据吗? –