mysql 开发进阶篇系列 49 表的数据导出(into outfile,mysqldump)
一.概述
在数据库的日常维护中,表的导入和导出是很频繁的操作,本篇讲解如何使用导入功能,并以案例为演示。某些情况下,需要将表里的数据导出为某些符号分割的纯数据文本,而不是sql语句,比如:(1)用来作为excel显示。 (2)节省备份空间。(3)为了快速的加载数据,load data的加载速度比普通的sql加载要快20倍以上。为了满足这些应用,可以使用以下两种办法来实现。
1. 方法1 into outfile
-- 格式如下:
select ... into tablename into outfile 'target_file' [option];
|
option参数 |
option参数说明 |
|
Fields terminated by 'string' |
字符分隔符,默认为制表符 \t |
|
Fields [optionally] enclosed by 'char' |
字段引用符,如果加optionally选项则只用在char,varchar和test等字符型字段上,默认不使用引用符 |
|
Fields escaped by 'char' |
转义字符,默认为\ |
|
Lines starting by 'string' |
每行前都加此字符串, 默认' ' |
|
Lines terminated by 'string' |
行结束符 默认为 \n |
例1:下面是导出testbackup表数据到数据文本,文件在服务器目录/tmp目录下。使用字符分隔符(terminated by )为逗号(',') 。使用字段引用符(enclosed by)为双引号( ' " ')。
-- 导出表脚本
SELECT * FROM test.`testbackup` INTO OUTFILE '/tmp/testbackup.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"'

例2:发现第一列是数值型,如果不希望字段两边用引号,则语句改为如下脚本。导出到testbackup表数据 到服务器目录/tmp目录下(使用OPTIONALLY 选项引用符只用在char, varchar,test等字段上)
-- 导出表脚本
SELECT * FROM test.`testbackup` INTO OUTFILE '/tmp/testbackup1.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

1.1. 转义字符
into outfile方法导出来测试转义字符, 转义字符是由于含义模糊而需要特殊进行转换的字符。不同情况下,需要转义的字符不一样。在mysql 导出的数据中需要转义的字符主要包括以下3类: 转义字符本身; 字段分隔符; 记录分隔符。
-- 下面将testbackup表中的name更新为含(\)的转义字符以及字段分隔符(")
UPDATE testbackup SET `name`='\\"##!aa' WHERE id=1
-- 导出数据
SELECT * FROM test.`testbackup` INTO OUTFILE '/tmp/testbackup2.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

上面的导出结果,因为name中含有转义字符本身 \ , 字段引用符(enclosed by)" " ", 因此,输出的数据中前面加上了转义字符,变成了\\\# 。
-- 下面将testbackup表中的name更新为含字段分隔符" , "的字符串
UPDATE testbackup SET `name`='\\"#,#,!aa' WHERE id=1
-- 导出
SELECT * FROM test.`testbackup` INTO OUTFILE '/tmp/testbackup3.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

上面的分隔符" , "并没有转义,因为字符中两边带有引用符 " " "(双引号), 所以没有将它作为字段分隔符。只是作为一个普通的数据字符来对待。下面继续将输出文件的字段引用符去掉,这时数据中的" , "将成为转义字符而加上了" \ "。
-- 导出
SELECT * FROM test.`testbackup` INTO OUTFILE '/tmp/testbackup4.txt' FIELDS TERMINATED BY ','

总结: 当导出命令中包含字段引用符时(OPTIONALLY ENCLOSED BY ' " '), 数据中含有转义字符本身( \ )和字段引用符的字符需要转义。
当导出命令中不包含字段引用符时(OPTIONALLY ENCLOSED BY ' " '), 数据中含有转义字符本身( \ )和字段分隔符(TERMINATED BY ' , ')的字符需要转义。
2. 方法二 mysqldump
用 mysqldump 导出数据为纯文本。在第35篇讲到了mysqldump数据导出工具,讲到了数据表导出表结构和数据的可执行T-SQL脚本,可以用来创建表和表数据。
-- 之前导出的脚本文件最基本的语法是:
mysqldump -uroot -p dbname > dbname.txt
--这里继续讲用mysqldump工具导出纯数据的文本。语法如下:
mysqldump -uroot -p target_dir dbname tablename [option]
|
Option 参数 |
说明 |
|
--fields-terminated-by=name |
字段分隔符 |
|
--fields-enclosed-by=name |
字段引用符 |
|
--fields-optionally-enclosed-by=name |
字段引用符(只能用在char,varchar,text等字符型上) |
|
--fields-escaped-by=name |
转义字符 |
|
--lines- terminated-by=name |
记录结束符 |
-- 导出 这里使用了字段分隔符,和字段引用符
[root@hsr tmp]# mysqldump -uroot -p -T /tmp/ test testbackup --fields-terminated-by ',' --fields-optionally-enclosed-by '"'
导出后产生了二个文件,(1)是testbackup.sql 的创建表结构脚本,(2)是testbackup.txt的表数据。

总结:使用mysqldump工具除了创建脚本文件外(table.sql),和select .. into outfile的选项和语法相似,mysqldump实际调用的就是into outfile提供的接口。
mysql 开发进阶篇系列 49 表的数据导出(into outfile,mysqldump)的更多相关文章
- mysql 开发进阶篇系列 50 表的数据导入(load data infile,mysqlimport )
一.概述 上篇讲到的表的数据导出(select .. into outfile 或者mysqldump),这篇继续讲表的数据导入,导入也同样有二个方法,分别是load data infile... 和 ...
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
- mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)
一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...
- mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...
- mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)
一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...
- mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...
- mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql 开发进阶篇系列 2 SQL优化(explain分析)
接着上一篇sql优化来说 1. 定位执行效率较低的sql 语句 通过两种方式可以定位出效率较低的sql 语句. (1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_q ...
- mysql 开发进阶篇系列 4 SQL 优化(各种优化方法点)
1 通过handler_read 查看索引使用情况 如果索引经常被用到 那么handler_read_key的值将很高,这个值代表了一个行被索引值读的次数, 很低的值表明增加索引得到的性能改善不高,索 ...
随机推荐
- Winform .NET 利用NPOI导出大数据量的Excel
前言:公司让做一个导出数据到Excel的小工具,要求是用户前端输入sql语句,点击导出按钮之后,将数据导出到Excel,界面如图所示:文件下端显示导出的进度 遇到的问题: 1.使用NPOI进行Exce ...
- C# Winform Soket 网络编程 多个客户端连接服务器并返回客户端操作请求
2017.8.2 服务器: #region 参数与集合 /// <summary> /// 客户端IP /// </summary> string clientIP; /// ...
- flume1.4.0源码结构剖析
flume基本思想: source负责收集数据,channel负责缓存数据,sink负责消费channel中的数据,具体使用方式这里不赘述 生命周期管理: 生命周期相关代码在flume-ng-core ...
- 利用Python生成GIF动图
一.PIL库 1.PIL库的概括: PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库 ...
- BJOI2018 简要题解
二进制 序列上线段树维护DDP好题. 题解可以看这篇 代码: #include<bits/stdc++.h> #define ri register int using namespace ...
- ADO.NET学习笔记(1)
ADO.Net是.Net框架中为数据库的访问而封装的一个库.通过这个库我们可以简单便捷的访问数据库,并对数据库进行一些增删改查的操作,目前ADO.Net支持四种主流的数据库,分别是SQL.OLE DB ...
- 基于面向方面和UML的实时系统建模研究
一.基本信息 标题:基于面向方面和UML的实时系统建模研究 时间:2010 出版源:计算机技术与发展 领域分类:面向方向:实时系统:横切关注点:统一建模语言: 二.研究背景 问题定义:实时系统建模研究 ...
- SQL给数据编号
方法:ROW_NUMBER() over(order by getdate()) AS num 使用案例 : select * From (select ROW_NUMBER() over(orde ...
- java 保证程序安全退出
以前在开发时只知道依靠数据库事务来保证程序关闭时数据的完整性. 但有些时候一个业务上要求的原子操作,不一定只包括数据库,比如外部接口或者消息队列.此时数据库事务就无能为力了. 这时我们可以依靠java ...
- OC中重写set和get方法、懒加载
在写OC程序的时候,在很多时候我们会用到重写set或者get方法,重写这两个方法大多是用于刷新数据,比如懒加载. 意思就是说当你去调用set或者get方法时,系统会去调用重写的get或者set方法,这 ...