SQL 语句将特定数据以指定格式输出到文本文件中

来源:互联网 发布:淘宝卖小姐资料 编辑:程序博客网 时间:2024/05/01 21:46

在做数据备份的时候,我们通常会遇到将数据以指定格式输出到文本文件中这种情况。

在MySQL 中提供了一种SELECT 语法,专供用户通过SQL 语句将某些特定数据以指定格式输出到文本文件中,同时也提供了实用工具和相关的命令可以方便的将导出文件原样再导入到数据库中。

该命令有几个需要注意的参数如下:
实现字符转义功能的“FIELDS ESCAPED BY ['name']” 将SQL 语句中需要转义的字符进行转义;
可以将字段的内容“包装”起来的“FIELDS [OPTIONALLY] ENCLOSED BY 'name'”,如果不使用“OPTIONALLY”则包括数字类型的所有类型数据都会被“包装”,使用“OPTIONALLY”之后,则数字类型的数据不会被指定字符“包装”。

通过"FIELDS TERMINATED BY"可以设定每两个字段之间的分隔符;而通过“LINES TERMINATED BY”则会告诉MySQL 输出文件在每条记录结束的时候需要添加什么字符。


如以下示例:
mysql> SELECT * INTO OUTFILE '/tmp/dump.txt'
-> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
-> LINES TERMINATED BY '\n'
-> FROM test_outfile limit 100;
Query OK, 100 rows affected (0.00 sec)
mysql> exit;

Bye


root@zachway:/tmp# cat dump.txt
350021,21,"A","abcd"
350022,22,"B","abcd"
350023,23,"C","abcd"
350024,24,"D","abcd"
350025,25,"A","abcd"

... ...


===========================可爱的分隔符===============================

除了上面所述的那种方法,我们还可以借助mysqldump这个工具。

我们都知道mysqldump 可以将数据库中的数据以INSERT 语句的形式生成相关备份文件,其实除了生成INSERT 语句之外,mysqldump 还同样能实现上面“SELECT ... TO OUTFILE FROM ...”所实现的功能,而且同时还会生成一个相关数据库结构对应的创建脚本。


如以下示例:
root@zachaway:~# ls -l /tmp/mysqldump
total 0
root@zachaway:~# mysqldump -uroot -T /tmp/mysqldump test test_outfile --fields-enclosed-by=\" --fields-terminated-by=,
root@zachaway:~# ls -l /tmp/mysqldump
total 8
-rw-r--r-- 1 root root 1346 2008-10-14 22:18 test_outfile.sql
-rw-rw-rw- 1 mysql mysql 2521 2008-10-14 22:18 test_outfile.txt


root@zachaway:~# cat /tmp/mysqldump/test_outfile.txt
350021,21,"A","abcd"
350022,22,"B","abcd"
350023,23,"C","abcd"
350024,24,"D","abcd"
350025,25,"A","abcd"
... ...


root@zachaway:~# cat /tmp/mysqldump/test_outfile.sql
-- MySQL dump 10.11
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 5.0.51a-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `test_outfile`
--
DROP TABLE IF EXISTS `test_outfile`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `test_outfile` (
`id` int(11) NOT NULL default '0',
`t_id` int(11) default NULL,
`a` char(1) default NULL,
`mid` varchar(32) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2008-10-14 14:18:23


这样的输出结构对我们做为备份来使用是非常合适的,当然如果一次有多个表需要被dump,就会针对每个表都会生成两个相对应的文件。


0 0
原创粉丝点击