码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 数据导入

时间:2016-05-09 22:16:13      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:mysql 数据导入 mysqlimport load data

100001,胡一,北京,huyi@51enet.com
100002,胡二,上海,huer@51enet.com
100003,胡十,广州,hubai@51enet.com
100004,胡百,深圳,hushi@51enet.com
100005,胡千,珠海,huqian@51enet.com
100006,胡万,杭州,huwan@51enet.com


create table ld_csv1(id int not null default ‘0‘,
 username varchar(5) not null,
 city varchar(6) not null,
 email varchar(50) not null) engine=innodb default charset=utf8;

注意mysql5.7要先设置my.cnf的变量:
secure_file_priv=""

然后重启数据库,然后执行mysqlimport命令:
[root@localhost soft]# mysqlimport -uroot -p123456 -h192.168.11.31 test --default-character-set=utf8 --fields-terminated-by=‘,‘ /tmp/ld_csv1


--default-character-set= 设置默认字符
--fields-terminated-by 指定每列分隔符
-i,--ignore 如果插入记录有重复键,那么该条记录不处理
-r,--replace:如果插入记录发现重复,则覆盖旧记录
-L,--local 从执行mysqlimport命令的客户端本地读文件。
-l,--lock-tables:导入时锁定表
-S,--silent:静默模式导入
--ignore-lines= 跳过文件的前n行
--use-threads= 以并行方式加载
-d,--delete 导入数据前先删除旧数据。
--fields-enclosed-by=xx指定括住列值的符号
--fields-optionally-enclosed-by=xxx  指定列限定符,如果没有限定符就忽略。

假设下面数据:
100007#“胡#万万”#“杭州”#“huwan@51enet.com”
该数据用户名中间用一个#符号,可以用下面命令进行导入:
mysqlimport -uroot -p123456 -h192.168.11.31 test --default-character-set=utf8 --fields-terminated-by=‘#‘
--fields-enclosed-by=\" /tmp/ld_csv1

当一条记录包含在多行时,以三个#号结束一条记录:
100006#"胡万"#"杭
州"#"huwan@51enet.com"###
100007#"胡#
万万"#"杭州"#"huwan@51enet.com"###

可以使用:
--lines-terminated-by= 指定文中记录行的结束符,默认是换行符号,命令如下:
[root@localhost tmp]# mysqlimport -uroot -p123456 -h192.168.11.31 -d test --default-character-set=utf8 --fields-terminated-by=‘#‘ --fields-enclosed-by=\" --lines-terminated-by=‘###\n‘ /tmp/ld_csv1

mysqlimport仅仅使用数据比较规范的导入。


load data infile

语法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ‘file_name‘
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (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,...)]
    [SET col_name = expr,...]
    
利用之前的数据,创建下面表:


create table ldsql(
id int(11) default 0,
username varchar(5),
city varchar(6),
email varchar(50)) engine=innodb charset=utf8;

[root@localhost tmp]# cat cvs2
100001#"胡一"#"北京"#"huyi@51enet.com"
100002#"胡二"#"上海"#"huer@51enet.com"
100003#"胡十"#"广州"#"hubai@51enet.com"
100004#"胡百"#"深圳"#"hushi@51enet.com"
100005#"胡千"#"珠海"#"huqian@51enet.com"
100006#"胡万"#"杭州"#"huwan@51enet.com"
100007#"胡#万万"#"杭州"#"huwan@51enet.com"

mysql> load data infile ‘/tmp/cvs2‘ into table ldsql charset utf8 FIELDS TERMINATED BY ‘#‘;

数据成功导入.
FIELDS OPTIONALLY ENCLOSED BY,LINES TERMINATED BY等处理语法都与mysqlimport相同。

处理数据文件前N行记录不导入:
可以使用[IGNORE number LINES]语法。
mysql> truncate ldsql;
Query OK, 0 rows affected (0.01 sec)
mysql> load data LOCAL infile ‘/tmp/cvs2‘ into table ldsql charset utf8 FIELDS TERMINATED BY ‘#‘ IGNORE 2 LINES;

处理行列问题,有以下数据:

Junsansi"abc",1
WHere is Junsansi"def",2
"ghi",3
导入数据过程中过滤Junsansi字符,创建下面测试表:
create table test_starting(v1 varchar(20),id int);

LOAD DATA INFILE ‘/tmp/test_starting‘ INTO TABLE test_starting FIELDS TERMINATED BY ‘,‘ OPTIONALLY ENCLOSED BY ‘"‘ LINES STARTING BY "Junsansi";
LINES STARTING BY ‘prefix_string‘ 希望跳过包含指定字符的前缀及前缀之前的所有字符。

有一个csv格式文件,内容如下:
1,192.168.11.25,Centos5.4,serverGroup1-2,0.11
2,192.168.11.79,WINDOWS SERVER 2003,serverGroup2-3,0.14
3,192.168.11.31,Centos57,serverGroup3-4,0.15
创建表:

create table ld_t1(id int not null auto_increment primary key,
ip varchar(15),
os varchar(20),
prcname varchar(20),
res varchar(10)) charset utf8;
导入语句:
load data infile ‘/tmp/ld_t1‘ into table ld_t1 FIELDS TERMINATED BY ‘,‘ IGNORE 1 LINES;

本文出自 “技术博客” 博客,请务必保留此出处http://raytech.blog.51cto.com/7602157/1771600

MySQL 数据导入

标签:mysql 数据导入 mysqlimport load data

原文地址:http://raytech.blog.51cto.com/7602157/1771600

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!