Mysql教程

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表中。


关注微信获取最新动态