0
点赞
收藏
分享

微信扫一扫

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)

微笑沉默 2024-11-04 阅读 8

临时开启命令:

SHOW GLOBAL VARIABLES LIKE 'local_infile';
SET GLOBAL local_infile=1;


直接在服务器可以使用

./mysql -u root --local-infile -p 

load data local infile '/root/8.csv' into table `taomao3d`.`taomao3d` fields escaped by '\\' terminated by ',' enclosed by '"' lines terminated by '\n' (`periods`, `periods_time`, `lotteryn_number`, `pre_periods`, `next_periods`);


LOAD DATA LOCAL INFILE 'F:\\chengben000.txt' INTO TABLE `twms2023s1`.`tb_chengben` FIELDS ESCAPED BY '\\' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (`daqu`, `zerenbanshichu`, `shourujiesuandanwei`, `xiangmu`, `chengbenkemu`, `dingdanwanchengshijian`, `qidian`, `zhongdian`, `chengben`, `zengzhishuilv`, `fuzeren`); 



LOAD DATA LOCAL INFILE 'F:\\chengben000.txt' 
INTO TABLE `twms2023s1`.`tb_chengben` 
FIELDS ESCAPED BY '\\' 
TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(`daqu`, `zerenbanshichu`, `shourujiesuandanwei`, `xiangmu`, `chengbenkemu`, `dingdanwanchengshijian`, `qidian`, `zhongdian`, `chengben`, `zengzhishuilv`, `fuzeren`); 


load data 语法:

LOAD DATA
    [LOW_PRIORITY | CONCURRENT] [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

数据分割符说明

fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:
terminated by 以什么字符作为分隔符
enclosed by 字段闭合标签
escaped by 转义字符
terminated by 描述字段的分隔符,默认情况下是tab字符(\t)
enclosed by 描述的是字段的括起字符。
escaped by 描述的转义字符。默认的是反斜杠(backslash:\ )
lines 关键字指定了每条记录的分隔符默认为’\n’即为换行符 (不指定一个lines子句,缺省值默认写的如: lines terminated by’\n’)
[IGNORE number LINES] 忽略特定行数,CSV文件可以忽略掉第一行标题

换行符说明

(1)Unix系统里,每行结尾只有“<换行>”,即“\n”;
(2)Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
(3)Mac系统里,每行结尾是“<回车>”,即“\r”。
CR(Carriage Return)表示回车
LF(Line Feed)表示换行
Dos和Windows采用回车+换行(CR+LF)表示下一行
而UNIX/Linux采用换行符(LF)表示下一行
苹果机(MAC OS系统)则采用回车符(CR)表示下一行


示例

1、例:将 a.txt 数据导入到 tab_mytest 表

load data local infile 'D:\\a.txt'
into table tab_mytest
fields terminated by '\t' -- 字段分隔符
lines terminated by '\n' -- 行分隔符
ignore 1 lines -- 忽略第一行(一般是忽略字段/标题行)
(id,name); -- 数据库表列(与文件数据列对应)

2、例:处理空字段

使用 IF (…) 或 NULLIF (…) 处理空字段。

load data local infile '/app/a.del' into table brcp_rdifs_index_new 
fields terminated by '' lines terminated by '\n' 
(@cert_no,@cust_name,@credit_money,@guarantee_money,@loan_up_count)
 set 
 cert_no=if(@cert_no is null or @cert_no='',null,@cert_no),
 cust_name=if(@cust_name is null or @cust_name='',null,@cust_name),
 credit_money=if(@credit_money is null or @credit_money='',null,@credit_money),
 guarantee_money=if(@guarantee_money is null or @guarantee_money='',null,@guarantee_money),
 loan_up_count=if(@loan_up_count is null or @loan_up_count='',null,@loan_up_count)

或者

load data local infile '/app/a.del' into table brcp_rdifs_index_new 
fields terminated by '' lines terminated by '\n' 
(cert_no,cust_name,@credit_money,@guarantee_money,@loan_up_count) 
set credit_money=NULLif(@credit_money,''),
guarantee_money=NULLif(@guarantee_money,''),
loan_up_count=NULLif(@loan_up_count,'')


-- 定义sql语句
mysql_sql="load data local infile '/app/a.del' into table brcp_rdifs_index_new 
fields terminated by '' lines terminated by '\n' 
(cert_no,cust_name,@credit_money,@guarantee_money,@loan_up_count) 
set credit_money=NULLif(@credit_money,''),
guarantee_money=NULLif(@guarantee_money,''),
loan_up_count=NULLif(@loan_up_count,'')"
-- 执行sql语句
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} --local-infile=1 -e "${mysql_sql}"


常见问题

问题 1:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv

使用命令查看当前值:

show variables like '%secure%';

解决:

(1)修改 my.ini,在 [mysqld] 中加入:

secure-file-priv=''

S: 表示任意目下都能导入文件到 mysql 中。

(2)重启 mysql 服务


问题 2:

ERROR 1300 (HY000): Invalid utf8 character string: ''

一般是 txt 文件格式不匹配导致。使用以下命令查看 mysql 中变量的格式:

show full columns from testtb;

如果显示 utf-8,则需要将 txt 用记事本打开,另存为,选编码格式为 utf-8.


问题 3:

ERROR 1261 (01000): Row 228 doesn’t contain data for all columns

查看当前连接的 sql_mode:

show variables like 'sql_mode';

解决方法:

(1)修改 my.ini,设置 set sql_mode 不包含‘strict_trans_tables

(2)重启 mysql 服务


问题 4:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

解决方法(2 种):

第一种: 重新编译安装加上上面的参数(这种一般不采取):

./configure --prefix=/usr/local/mysql --enable-local-infile
make
make install

第二种: SQL 命令加参数:--local-infile=1

mysql -uroot -proot  mydb_name --local-infile=1 -e 
'load  data local  infile  "/home/a.txt" into table AS_China fields terminated
 by "\t"  lines terminated by "\n";'



从 mysql 系统永久开启数据文件加载:

[mysqld]
local_infile=ON
[mysql]
local_infile=ON 

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)_mysql

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)_字段_02


sqlyong 工具类使用

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)_sql_03

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)_字段_04

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)_mysql_05

开启 MySQL 导入文本文件数据(LOAD DATA LOCAL INFILE...)_字段_06

举报

相关推荐

0 条评论