除了使用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
”,使用“?
”替代了系统默认的“\
”。
