标签: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 数据导入 mysqlimport load data
原文地址:http://raytech.blog.51cto.com/7602157/1771600