已掌握LOAD DATA LOCAL INFILE本地CSV导入,如何用mysqlimport从外部服务器导数据?
使用mysqlimport从外部服务器导入CSV并处理日期转换
既然你已经搞定了本地LOAD DATA LOCAL INFILE的导入,现在要切换到外部服务器用mysqlimport,这个工具其实是LOAD DATA INFILE的命令行封装,不过它本身没法直接支持SET子句做字段转换(比如你之前的日期格式化),所以得稍微绕一下,下面给你两种可行的方案:
方案1:结合mysql命令行实现(最贴近你之前的操作)
虽然你提到了mysqlimport,但如果要完全复刻之前带日期转换的导入逻辑,其实用mysql命令行直接执行LOAD DATA语句更直接,只需要加上外部服务器的连接参数就行:
mysql --host=external_server_host --user=your_username --password=your_password your_database_name << EOF LOAD DATA LOCAL INFILE 'C:/data/order.csv' INTO TABLE order_tab FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (@Order_Date,Order_ID,Order_Number) SET Order_Date = STR_TO_DATE(@Order_Date, '%d-%b-%Y %l:%i %p MDT'); EOF
方案2:用mysqlimport导入到临时表再转换
如果一定要用mysqlimport工具,可以先把数据导入临时表,再处理日期后插入到目标表:
步骤1:创建临时表
先在数据库里创建一个和目标表结构匹配的临时表,允许日期字段接收原始字符串:
CREATE TEMPORARY TABLE temp_order_tab LIKE order_tab; -- 若原表Order_Date是DATE/DATETIME类型,临时表先改成字符串类型接收原始数据 ALTER TABLE temp_order_tab MODIFY COLUMN Order_Date VARCHAR(50);
步骤2:用mysqlimport导入临时表
执行mysqlimport命令,把CSV导入临时表:
mysqlimport --local --host=external_server_host --user=your_username --password=your_password \ --fields-terminated-by=',' --fields-enclosed-by='"' --lines-terminated-by='\n' \ --ignore-lines=1 --table=temp_order_tab \ your_database_name C:/data/order.csv
步骤3:转换日期并插入目标表
执行SQL把临时表的数据转换日期后插入到order_tab:
INSERT INTO order_tab (Order_Date, Order_ID, Order_Number) SELECT STR_TO_DATE(Order_Date, '%d-%b-%Y %l:%i %p MDT'), Order_ID, Order_Number FROM temp_order_tab; -- 完成后删除临时表 DROP TEMPORARY TABLE temp_order_tab;
补充:mysqlimport核心参数对应关系
--local:对应LOAD DATA里的LOCAL,表示从客户端本地读取文件--fields-terminated-by=',':对应FIELDS TERMINATED BY ','--fields-enclosed-by='"':对应FIELDS ENCLOSED BY '"'--lines-terminated-by='\n':对应LINES TERMINATED BY '\n'--ignore-lines=1:对应IGNORE 1 LINES,跳过CSV表头--table=order_tab:显式指定目标表(默认mysqlimport会用去掉.csv后缀的文件名作为表名)
内容的提问来源于stack exchange,提问作者Anton Lieskovsky
相关产品推荐
相关产品推荐

