【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-优快云博客
《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)
除了使用SELECT… INTO OUTFILE语句导出文本文件之外,还可以使用mysqldump命令。11.1节开始介绍了使用mysqldump备份数据库,该工具不仅可以将数据导出为包含CREATE、INSERT的sql文件,也可以导出为纯文本文件。
mysqldump创建一个包含创建表的CREATE TABLE语句的tablename.sql文件和一个包含其数据的tablename.txt文件。mysqldump导出文本文件的基本语法格式如下:
mysqldump -T path-u root -p dbname [tables] [OPTIONS]
只有指定了-T参数才可以导出纯文本文件;path表示导出数据的目录;tables为指定要导出的表名称,如果不指定,将导出数据库dbname中所有的表;[OPTIONS]为可选参数选项,这些选项需要结合-T选项使用。OPTIONS常见的取值有:
- --fields-terminated-by=value:设置字段之间的分隔字符,可以为单个或多个字符,默认情况下为制表符(\t)。
- --fields-enclosed-by=value:设置字段的包围字符。
- --fields-optionally-enclosed-by=value:设置字段的包围字符,只能为单个字符,只能包括CHAR和VERCHAR等字符数据字段。
- --fields-escaped-by=value:控制如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认值为\。
- --lines-terminated-by=value:设置每行数据结尾的字符,可以为单个或多个字符,默认值为“\n”。
这里的OPTIONS的设置与SELECT…INTO OUTFILE语句中的OPTIONS不同,各个取值中等号后面的value值不要用引号括起来。
【例11.13】使用mysqldump将test_db数据库person表中的记录导出到文本文件,SQL语句如下:
mysqldump -T D:\ test_db person -u root -p
语句执行成功,系统D盘目录下面将会有两个文件,分别为person.sql和person.txt。person.sql包含创建person表的CREATE语句,其内容如下:
-- MySQL dump 10.13 Distrib 9.0.1, for Win64 (x86_64)
--
-- Host: localhost Database: test_db
-- ------------------------------------------------------
-- Server version 9.0.1
/*!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 */;
SET NAMES utf8mb4 ;
/*!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 `person`
--
DROP TABLE IF EXISTS `person`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `person` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` char(40) NOT NULL DEFAULT '',
`age` int(11) NOT NULL DEFAULT '0',
`info` char(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
/*!40101 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 2024-07-25 16:40:55
备份文件中的信息已在11.1.1节中介绍了。
person.txt包含数据包中的数据,其内容如下:
1 Green 21 Lawyer
2 Suse 22 dancer
3 Mary 24 Musician
4 Willam 20 sports man
5 Laura 25 \N
6 Evans 27 secretary
7 Dale 22 cook
8 Edison 28 singer
9 Harry 21 magician
10 Harriet 19 pianist
【例11.14】使用mysqldump命令将test_db数据库中的person表中的记录导出到文本文件,使用FIELDS选项,要求字段之间使用逗号“,”间隔,所有字符类型字段值用双引号引起来,定义转义字符为“?”,每行记录以“\r\n”结尾,SQL语句如下:
mysqldump -T D:\ test_db person -u root -p --fields-terminated-by=, --fields-optionally-enclosed-by=\" --fields-escaped-by=? --lines-terminated-by=\r\n
Enter password: ******
上面语句要在一行中输入,语句执行成功后,系统D盘目录下面将会有两个文件,分别为person.sql和person.txt。person.sql包含创建person表的CREATE语句,其内容与【例11.13】中的相同;person.txt文件的内容与【例11.13】中的不同,显示如下:
1,"Green",21,"Lawyer"
2,"Suse",22,"dancer"
3,"Mary",24,"Musician"
4,"Willam",20,"sports man"
5,"Laura",25,?N
6,"Evans",27,"secretary"
7,"Dale",22,"cook"
8,"Edison",28,"singer"
9,"Harry",21,"magician"
10,"Harriet",19,"pianist"
可以看到,只有字符类型的值被双引号引起来了,而数值类型的值没有;第5行记录中的NULL表示为“?N”,使用“?”替代了系统默认的“\”。