16.4表的导出和导入
MySQL数据库中的表可以导出成文本文件、XML文件或者HTML文件。相应的文本文件也可以导入MySQL数据库中。在数据库的日常维护中,经常需要进行表的导出和导入的操作。本节将为读者介绍导出和导入文本文件的方法。
16.4.1 用SELECT...INTO OUTFILE 导出文本文件
MySQL中,可以使用SELECP...INTO OUTFILE语句将表的内容导出成一个文本文件。其基本语法形式如下:
SELECT [列名] FROM table [WHERE 语句] INTO OUTFILE _'目标文件'[OPTION];
该语句分为两个部分。前半部分是一个普遍的SELECT语句,通过这个SELECT语句来查询所需要的数据;后半部分是导出数据的。其中,“目标文件”参数指出将查询的记录导出到哪个文件;“OPTION”参数是可以有常用的5个选项。介绍如下:
-
FIELDS TREMNATED BY '字符串':设置字符串为字段的分隔符,默认值是"\t"
-
FIELDS ENCLOSED BY '字符':设置字符来括上字段的值。默认情况下不使用任何符号
-
FIELDS OPTIONALLY ENCLOSED BY '字符':设置字符来括上 CHAR,VARCHAR和TEXT等字符型字段。默认情况下不使用任何符号
-
FIELDS ESCAPED BY '字符':设置转义字符,默认值为"\"
-
LINES STARTING BY '字符串':设置每行开头的字符,默认情况下无任何字符
-
LINES TERMINATED BY '字符串':设置每行的结束符,默认值是"\N"
【示例16-5】下面用SELECT...INTO OUTFILE语句来导出test数据库下student表的记录。其中,字段之间用“,”隔开,字符型数据用双引号括起来。每条记录以“>”开头。命令如下:
SELECT * FROM test.student INTO OUTFILE 'C:/student1.txt' FIELDS TERMINATED BY 'V' OPTIONALLY ENCLOSED BY 'T' LINES STARTING BY '\>' TERMINATED BY '\r\n';
"TERNONATED BY '\r\n'"可以保证每条记录占一行。因为Windows操作系统下"\r\n"才是回车换行。如果不加这个选项,默认情况只是"\n"。用root用户登录到MySQL数据库中,然后执行上述命令。执行完后,可以在C:\下看到一个名为student.txt的文本文件。student.txt中的内容如下:
>901,"张老大","男",1985,"计算机系","北京市海淀区" >902,"张老二","男",1986,"中文系","北京市昌平区" >903,"张三","女",1990,"中文系","湖南省永州市" >904,"李四","男",1990,"英语系","辽宁省阜新市" >905,"王五","女",1991,"英语系","福建省厦门市" >906,"王六","男",1988,"计算机系","湖南省衡阳市"
这些记录都是以">"开头,每条记录之间以","隔开。而且,字符数据都加上了引号。
16.4.2 用mysqldump命令导出文本文件
mysqldump命令可以备份数据库中的数据。但是,备份时是在备份文件中保存了CREATE语句和INSERT语句。不仅如此,mysqldump命令还可以导出文本文件。其基本的语法形式如下:
mysqldump -u root -password -T 目标目录 dbname table [option];
其中Password参数表示root用户的密码,密码紧挨着-p选项;目标目录参数是指导出的文本文件的路径;dbname参数表示数据库的名称;table参数表示表的名称;option 表示附件选项。这些选项介绍如下:
-
--fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是"\t"
-
--fields-enclosed-by=字符:设置字符来括上字段的值
-
--fields-optionally-enclosed-by=字符:设置字符括上CHAR,VARCHAR和TEXT等字符型字段
-
--fields-escaped-by=字符:设置转义字符
-
--lines-terminated-by=字符:设置每行的结束符
这些选项必须用双引号括起来,否则,MySQL数据库系统将不能识别这几个参数。
【示例16-6】下面用mysqldump语句来导出test数据库下student表的记录。其中,字段之间用","隔开,字符型数据用双引号括起来。命令如下:
mysqldump -u root -phuang -T C:\ test student "-fields-terminated-by=," "-fields=Optionally-enclosed-by=""
其中root用户的密码为huang,密码紧挨着-p选项。--fields-terminated-by等选项都用双引号括起来。命令执行完后,可以在C:\下看到一个名为student.txt的文本文件和student.sql文件。student.txt中的内容如下:
901,"张老大","男",1985,"计算机系","北京市海淀区" 902,"张老二","男",1986,"中文系","北京市昌平区" 903,"张三","女",1990,"中文系","湖南省永州市" 904,"李四","男",1990,"英语系","辽宁省阜新市" 905,"王五","女",1991,"英语系","福建省厦门市" 906,"王六","男",1988,"计算机系","湖南省衡阳市"
这些记录都是以“,”隔开。而且,字符数据都是加上了引号。其实,mysqldump命令也是调用SELECT INTO OUTFILE语句来导出文本文件的。除此之外,mysqldump命令 同时还生成了student.sql文件。这个文件中有表的结构和表中的记录。
技巧:导出数据时,一定要注意数据的格式。通常每个字段之间都必须用分隔符隔开, 可以使用逗号(,),空格或者制表符(Tab)。每条记录占用一行,新记录要从下一行开始。字符串数据要使用双引号括起来。
mysqldump命令还可以导出xml格式的文件,其基本语法如下:
mysqldump -u root -pPassword —xml | -X dbname table > C:/name.xml;
其中,-pPassword表示root用户的密码;使用--xml或者-x选项就可以导出xml格式的文件;dbname表示数据库的名称;table表示表的名称;C:/name.xml表示导出的xml文件的路径。
16.4.3 用mysql命令导出文本文件
mysql命令可以用来登录MySQL服务器,也可以用来还原备份文件。同时,mysql命令也可以导出文本文件。其基本语法形式如下:
mysql -u root -pPassword -e "SELECT 语句"dbname> C:/name.txt;
其中,Password表示root用户的密码;使用-e选项就可以执行SQL语句;“SELECT 语句”用来查询记录;c:/name.txt表示导出文件的路径。
【示例16-7】下面用mysql命令来导出test数据库下student表的记录。命令如下:
mysql -u root -phuang -e "SELECT * FROM student" test > C:/student2.txt
上述命令将student表中的所有记录查询出来,然后写入到student2.txt文档中。 student2.txt中的内容如下:
id name sex birth department address 901 张老大 男 1985 计算机系 北京市海淀区 902 张老二 男 1986 中文系 北京市昌平区 903 张三 女 1990 中文系 湖南省永州市 904 李四 男 1990 英语系 辽宁省阜新市 905 王五 女 1991 英语系 福建省厦门市 906 王六 男 1988 计算机系 湖南省衡阳市
mysql命令还可以导出XML文件和HTML文件。mysql命令导出XML文件的语法如下:
mysql -u root -pPassword -xml | -X -e "SELECT 语句"dbname> C:/name.xml;
其中,Password表示root用户的密码;使用-xml 或者-X选项就可以导出xml格式的文件;dbname表示数据库的名称; C:/name.xml表示导出的xml文件的路径。 mysql命令导出HTML文件的语法如下:
mysql -u root -pPassword -html | -H -e "SELECT 语句"dbname > C:/name.html;
其中,使用-html 或者-H选项就可以导出HTML格式的文件。
16.6.4 用LOAD DATA INFILE方式导入文本文件
MySQL中,可以使用LOAD DATA mFILE命令将文本文件导入到MySQL数据库中。其基本语法形式如下:
LOAD DATA [LOCAL] INFILE file INTO TABLE table [OPTION];
<>其中,“LOCAL”是在本地计算机中查找文本文件时使用的;“file”参数指定了文 本文件的路径和名称;“table”参数指表的名称;“OPTION”参数是可以有常用的选项, 介绍如下:
-
FIELDS TERMINATED BY '字符串':设置字符串为字段的分隔符,默认值是“\t”
-
FIELDS ENCLOSED BY '字符':设置字符来括上字段的值。默认情况下不使用任何符号
-
FIELDS OPTIONALLY ENCLOSED BY '字符1:设置字符来括上 CHAR、 VARCHAR和TEXT等字符型字段。默认情况下不使用任何符号
-
FIELDS ESCAPED BY '字符':设置转义字符,默认值为“\”
-
LINES STARTING BY '字符串’:设置每行开头的字符,默认情况下无任何字符
-
LINES TERMINATED BY '宇符串’:设置每行的结束符,默认值是“\N”;
-
IGNORE n LINES: 忽略文件的前n行记录;
-
(字段列表):根据字段列表中的字段和顺序来加载记录
-
SET column=expr:将指定的列column进行相应地转换后再加载,使用expr表达式来进行转换
【示例16-8】下面使用LOAD DATA WFILE命令将student.txt中的记录导入到student表中。命令如下:
LOAD DATA INFILE 'C:/student.txt' INTO TABLE student FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "";
使用LOAD DATA INFILE导入时,要注意student.txt文件中的分隔符。在执行该语句
mysql> DELETE FROM student; Query OK, 6 rows affected (0.08 sec) mysql> SELECT * FROM student; Empty set (0.01 sec) mysql> LOAD DATA INFILE 'C:/student.txt' INTO TABLE student -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ,'"'; Query OK, 6 rows affected (0.00 sec) Records: 6 Deleted: 0 Skipped: 0 Warnings: 0 mysql> SELECT * FROM student; +-----+--------+-------+---------+--------------+--------------+ | id | name | sex | birth | department | address | +-----+--------+-------+---------+--------------+--------------+ | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 | | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 | | 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 | | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 | | 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 | | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | +-----+--------+-------+---------+--------------+--------------+ 6 rows in set(0.00 sec)
16.4.5用mysqlimport命令导入文本文件
MySQL中,可以使用mysqlimport命令将文本文件导入到MySQL数据库中。其基本语法形式如下:
mysqlimport -u root -pPassword [-LOCAL] dbname file [OPTION]
其中,Password参数是root用户的密码,必须与-p选项紧挨着;LOCAL是在本地计算机中査找文本文件时使用的;“dbname”参数表示数据库的名称;“file”参数指 定了文本文件的路径和名称;“OPTION”参数是可以有常用的选项。介绍如下:
-
--fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是"\t"
-
--fields-enckosed-by=字符:设置字符来括上字段的值
-
--fields-optionally-by字符:设置字符括上CHAR、VARCHAR和TEXT等字符型字段
-
--fields-escaped-by=字符:设置转义字符
-
--lines-terminated-by=字符串:设置每行的结束符
-
--ignore-lines=n:表示可以忽略前几行
【示例16-9】下面用mysqlimport命令,将student.txt中的记录导入到student表中。命令如下:
mysqlimport -u root -phuang test C:\student.txt "-_fields-terminated-by=," "--fields-optionally-enclosed-by=""
使用mysqlimport命令导入时,要注意student.txt文件中的分隔符。执行该命令之后,就可以将student.txt中的记录导入到test数据库下的student表中。