LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name,...)]
LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。如果指定LOCAL关键词,从客户主机读文件。如果LOCAL没指定,文件必须位于服务器上。(LOCAL在MySQL3.22.6或以后版本中可用。)
为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用LOAD DATA INFILE,在服务器主机上你必须有file的权限。
代码举例:
load data local infile 'jingo.csv' into table th_dept_city_day_order_sum fields terminated by '\\t' enclosed by '' lines terminated by '\\n' (id,row_hash,province_id,province_name,city_id,city_name,complaint_num,order_num,order_date,order_year_week,order_year_mon,business_source,bu_code,bu_name,dept_id_1,dept_name_1,dept_id_2,dept_name_2,dept_id_3,dept_name_3)
NULL 值的处理有很多,取决于用户所使用的FIELDS 和LINES 选项:
对于缺省的FIELDS 和LINES 值,输出时,NULL 被写成\N,当读入时,\N 被作为NULL 读入(假设ESCAPED BY 字符为 “\”)。
在导入时候,有时候给的数据并不规范,如null的字段在csv文件里用N表示(正确格式应该为\N),下面截图
此时采用默认的load语句,在mysql中字段为varchar时候就会存储N值,而如果为int类型时候则直接报错。
(1) 生成csv文件时候手动判断null,如果为null赋值对应的默认值。
(2) Load语句添加参数 escaped by ‘N’ ,并且不能添加replace关键字,此时,int类型的存储默认值,varchar类型的存储空字符串。
如load语句
load data local infile 'jingo.csv' into table th_dept_city_day_order_sum fields terminated by '\\t' enclosed by '' escaped by 'N' lines terminated by '\\n' (id,row_hash,province_id,province_name,city_id,city_name,complaint_num,order_num,order_date,order_year_week,order_year_mon,business_source,bu_code,bu_name,dept_id_1,dept_name_1,dept_id_2,dept_name_2,dept_id_3,dept_name_3)
说明:
ENCLOSED BY参数,说明fields中每个字段被参数字符包围,在load数据入表时候,会去除ENCLOSED BY参数字符,此时截图中的N就变成了空字符,此时如果为varchar字符串则赋值,如果为int或其他类型则赋值默认值。
如果添加replace关键字,空字符串遇到varchar类型能正常赋值,而空字符串遇到int等类型,直接报错了,所以此时还需要手动赋默认值。
(3) 在不需要覆盖更新的功能的话(即不用replace关键字),最优化的脚本解决方案(2),如果需要覆盖功能的话(即用replace关键字),建议int类型等字段手动赋值默认值,有助于特殊警示作用(有些mysql的默认值不太理想,如日期等),varchar字段自动赋值空字符串。
不需要自动更新的load语句
load data local infile 'jingo.csv' into table th_dept_city_day_order_sum fields terminated by '\\t' enclosed by '' escaped by 'N' lines terminated by '\\n' (id,row_hash,province_id,province_name,city_id,city_name,complaint_num,order_num,order_date,order_year_week,order_year_mon,business_source,bu_code,bu_name,dept_id_1,dept_name_1,dept_id_2,dept_name_2,dept_id_3,dept_name_3)
需要自动更新的load语句
load data local infile 'jingo.csv' replace into table th_dept_city_day_order_sum fields terminated by '\\t' enclosed by '' escaped by 'N' lines terminated by '\\n' (id,row_hash,province_id,province_name,city_id,city_name,complaint_num,order_num,order_date,order_year_week,order_year_mon,business_source,bu_code,bu_name,dept_id_1,dept_name_1,dept_id_2,dept_name_2,dept_id_3,dept_name_3)