mysql的load data,高速将文本文件,插入数据库中
1语法
LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE 'file_name.txt'
[ REPLACE | IGNORE ]
INTO TABLE tbl_name
[ FIELDS
[ TERMINATED BY 'string' ]
[ [OPTIONALLY] ENCLOSED BY 'char' ]
[ ESCAPED BY 'char' ]
]
[ LINES
[ STARTING BY 'string' ]
[ TERMINATED BY 'string' ]
]
[ IGNORE number LINES ]
[ (col_name_or_user_var,...) ]
[ SET col_name = expr,...] ]
关键字解释
LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE 'file_name.txt'
[ REPLACE | IGNORE ]
INTO TABLE tbl_name
1LOW_PRIORITY: 加载数据被延迟,直道没有其他客户端从表中读取为止
CONCURRENT: 当加载的数据正在进行的时,如果有用户请求则开启新的线程来获取数据
2如果指定了LOCAL 关键字,它将对连接的客户端做出解释:
• 如果指定了LOCAL,客户端主机上的客户端组件读取文件并发送到服务器。可以给出文件的完整路径以确定其精确位置。如果给出的是相对路径,则文件名是相对于客户端组件启动时所在的目录。
• 如果没有指定LOCAL,文件是位于服务器的主机上,并且直接被服务器读取。
当从服务器主机定位文件时,服务器使用下列规则:
• 如果给定完整的路径,服务器使用该路径名。
• 如果给定一个或多个前置构件的相对路径,服务器以相对服务器的数据目录搜索文件。
• 如果给定没有前置构件的文件名,服务器从当前数据库的数据库目录搜寻文件。
3REPLACE 和IGNORE 关键字处理那些与已存在的主键值重复的输入记录
如果指定了REPLACE,输入行将会代替已存在的行(也就是说,主索引值相同的行将作为存在的行)。参考REPLACE 语法 。
如果指定了IGNORE,与已存在行主键值重复的输入行将被跳过。如果不指定二者中的任一个,则操作行为将依赖是否指定了LOCAL关键字。
没有指定LOCAL,则如果发现有重复的键值,将产生一个错误,并忽略文本文件的其余部分。
如果指定了LOCAL,则缺省的操作行为将与指定了IGNORE 的相同;这是因为,在操作过程中,服务器没有办法终止文件的传送。
[ FIELDS
[ TERMINATED BY 'string' ]
[ [OPTIONALLY] ENCLOSED BY 'char' ] //enclosed by描述的是字段的括起字符。
[ ESCAPED BY 'char' ] //escaped by描述的转义字符。默认的是反斜杠 (backslash:\ )
]
[ LINES
[ STARTING BY 'string' ]
[ TERMINATED BY 'string' ]
]
4
数据格式:
"中华之子","100","威武的不行了"
"大米","63","我爱吃"
"苹果","15","好吃"
load data infile 'D:/aa.txt' ignore into table 表名 character set gbk fields terminated by ',' enclosed by '"' lines terminated by '\r\n' (表中的字段1,表中的字段2,表中的字段3);
terminated by ',' 用什么风格字符
enclosed by '"' 字符用什么包起来的
lines terminated by '\r\n' 行的末尾换行符是什么(liunx改为\n)
[ IGNORE number LINES ]
[ (col_name_or_user_var,...) ]
[ SET col_name = expr,...] ]
5IGNORE number LINES选项可被用来忽略在文件的某一行
假设数据文件如下:
Book1.csv
编号,名称,说明
1,测试数据1,"测试CSV文件中,有逗号"
2,测试数据2,"测试CSV文件中有""双引号"""
3,测试数据3,"测试CSV文件中,有逗号和""双引号"""
4,测试数据4,普通数据
mysql> CREATE TABLE Test_Book1 (
-> id int,
-> name VARCHAR(10),
-> data VARCHAR(100)
-> );
Query OK, 0 rows affected (0.05 sec)
下面的 lines terminated by '\r\n' 是 要求换行符号,为 windows的换行
下面的 ignore 1 lines是 忽略第一行的标题行。
mysql> LOAD DATA INFILE 'f:/Book1.csv'
-> INTO TABLE Test_Book1
-> FIELDS TERMINATED BY ','
-> OPTIONALLY ENCLOSED BY '"'
-> lines terminated by '\r\n'
-> ignore 1 lines
-> (id, name, data);
mysql> select * from test_book1;
+------+-----------+--------------------------------+
| id | name | data |
+------+-----------+--------------------------------+
| 1 | 测试数据1 | 测试CSV文件中,有逗号 |
| 2 | 测试数据2 | 测试CSV文件中有"双引号" |
| 3 | 测试数据3 | 测试CSV文件中,有逗号和"双引号" |
| 4 | 测试数据4 | 普通数据 |
+------+-----------+--------------------------------+
ignore 1 lines 忽略第一行的标题行。
6@dummy的使用
假设数据文件如下:
Book1.csv
1,测试数据1,"测试CSV文件中,有逗号"
2,测试数据2,"测试CSV文件中有""双引号"""
3,测试数据3,"测试CSV文件中,有逗号和""双引号"""
4,测试数据4,普通数据
mysql> CREATE TABLE Test_Book1 (
-> id int,
-> name VARCHAR(10),
-> data VARCHAR(100)
-> );
Query OK, 0 rows affected (0.05 sec)
我只需要第一,二列的数据的时候
mysql> LOAD DATA INFILE 'f:/test_main.txt'
-> INTO TABLE test_main6
-> FIELDS TERMINATED BY ','
-> OPTIONALLY ENCLOSED BY ''''
-> (id,name, @dummy);
mysql> select * from test_book1;
+------+-----------+--------------------------------+
| id | name | data |
+------+-----------+--------------------------------+
| 1 | 测试数据1 | |
| 2 | 测试数据2 | |
| 3 | 测试数据3 | |
| 4 | 测试数据4 | |
+------+-----------+--------------------------------+
这里的关键点, 在于那个 @dummy。
对你而言, 如果文件有 10列, 你只导 2 , 7 的话, 那就是
@dummy,列2,@dummy,@dummy,@dummy,@dummy,列7,@dummy,@dummy,@dummy
7set子句
SET 子句可以提供不是来源于输入文件的值。下面的语句将column3 设置为当前的日期和时间:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, column2)
SET column3 = CURRENT_TIMESTAMP;
可以让某一列的值参与一些操作
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, @var1)
SET column2 = @var1/100;
也可以让前后列的数据产生关系(假设第一列是一个日期格式的数据,我的第三列可以根据第一列的日期计算出星期信息然后存入数据库)
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, column2)
SET column3 = SET name=CASE WHEN DATE_FORMAT(date,'%w') =1 THEN "星期一"
WHEN DATE_FORMAT(date,'%w') =2 THEN "星期二"
end;
使用列/变量列表和SET子句要受到一下限制:
• SET 子句中的赋值列名应当只能在赋值操作符的左边。
• 在SET 赋值语句中,可以使用子查询。此查询返回一个将被赋予列的值,它可能仅仅是一个标量查询。不能用子查询去查询将被导入的表。
• 对于列/变量列表或SET 子句,由于使用IGNORE 子句而被忽略的行就不会被处理。
• 由于用户变量没有显示宽度,当导入的数据是行固定格式时,将不能使用用户变量。
8设置存入时候使用的字符
gbk utf8
load data infile 'C:\\Users\\edgewalk\\Desktop\\test.txt' ignore into table test character set gbk fields terminated by ','
lines terminated by '\n' (
date,
money,
desctipt
)
2使用load data infile导入导出备份数据
如果要导出一个表中的部分字段或者部分符合条件的记录,需要用到了mysql的into outfile 和 load data infile 。 例如下面的mysql命令是把select的mytable表中的数据导出到C:\\Users\\7q\\Desktop\\test1.txt。
select * from test into outfile 'C:\\Users\\7q\\Desktop\\test1.txt' fields terminated by ',' lines terminated by '\r\n' ;
假如要导入刚才备份的数据,可以使用load file方法,例如下面的mysql命令,把导出的数据导入了mytable_bak的表中:
load data infile 'C:\\Users\\7q\\Desktop\\test1.txt' into table mytable_bak fields terminated by ',' lines terminated by '\r\n';
这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中.
mysql的load data,高速将文本文件,插入数据库中的更多相关文章
- mysql 的load data infile
LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.如果指定LOCAL关键词,从客户主机读文件.如果LOCAL没指定,文件必须位于服务器上.(LOCAL在MySQL3.22. ...
- Mysql 命令 load data infile 权限问题
[1]Mysql命令load data infile 执行权限问题 工作中,经常会遇到往线上环境mysql数据库批量导入源数据的场景. 针对这个场景问题,mysql有一个很高效的命令:load dat ...
- mysql 的load data infile要使用
LOAD DATA INFILE从文本文件中读出的声明以极高的速度到表. 1.基本语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fi ...
- 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中
执行了save()方法 sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...
- 把QQ聊天记录插入数据库中
最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...
- SqlBulkCopy将DataTable中的数据批量插入数据库中
#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...
- 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】
多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...
- MySQL基础之---mysqlimport工具和LOAD DATA命令导入文本文件
1.mysqlimport工具的使用 看一下命令的使用方法: shell > mysqlimport -u root -p [--LOCAL] DBname File [option] --f ...
- JDBC使用MYSQL的LOAD DATA LOACAL INFILE和LOAD DATA INFILE
MYSQL的LOAD方法都必须建立在mysql服务允许使用该命令的情况下: 开启该命令的方法: 1.在实例对应的my.cnf(windows为my.ini)中添加一行local-infile=1(默认 ...
随机推荐
- hnust 分蛋糕
问题 B: 分蛋糕 时间限制: 1 Sec 内存限制: 128 MB提交: 2430 解决: 966[提交][状态][讨论版] 题目描述 今天是DK生日,由于DK的朋友很多,所以DK在蛋糕店定制了 ...
- 课时34:丰富的else语句以及简洁的with语句
目录: 一.丰富的else语句 二.简洁的with语句 三.课时34课后习题及答案 *********************** 一.丰富的else语句 ********************** ...
- PHP页面跳转总结
一.使用php内置函数:header()函数 <?php$url='./test.php'; header("Location:$url"); ?> 注意Locatio ...
- ssh 免交互登录 ,远程执行命令脚本。
##免交互SSH登录auto_login_ssh () { expect -c "set timeout -1; spawn -noecho ssh -o ...
- myEclipse如何将程序部署到tomcat(附录MyEclipse调试快捷键)
部署 1.选中你要部署的项目,在工具栏找到 Deploy MyEclipse J2EE Project to Server 2.单击Add,即出现如下界面.选择相应的Server,要和你在配置tomc ...
- 使用pdb模块调试Python
在Python中,我们需要debug时,有三种方式: 加log语句.最简单的方式是添加print()语句来输出我们想要获知的状态或者变量,好处是简单容易操作,坏处是debug完了之后,还需要将prin ...
- 第十四篇:JavaScript
本篇内容 简介 使用 DOM 一. 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. Ja ...
- 【bzoj5047】空间传送装置 堆优化Dijkstra
题目描述 n个点e条边的有向图,每条边是m种类型之一.第i种类型在第x时刻通过所花费的时间为$(a_i*x+b_i)\mod c_i+d_i$.可以在某个点停留.问:在s时刻从1号点出发,到达每个点所 ...
- POJ 3974 Palindrome | 马拉车模板
给一个字符串,求最长回文字串有多长 #include<cstdio> #include<algorithm> #include<cstring> #define N ...
- hibernate用注解的方式实现orm
hibernate 有两种方式实现把一张表映射成一个对象,一种是配置文件的方式,一种是注解的方式.这里用hibernate提供的注解的方式实现一个对象和一张表之间的对应. 思路: 首先在hiberna ...