外观
表的导出与导入
MySQL数据库的表可以导出成文本文件、XML文件或HTML文件,相应的文本文件也可以导入到MySQL中。在表的维护中,需要经常执行数据库文件的导入和导出。下面将分别进行介绍。
用SELECT ... INTO OUTFILE语句导出文本文件
语法如下。
SELECT [col_name[,col_name,...]] FROM table [where clause] INTO OUTFILE 'target_file' [OPTION];该语句分为两个部分,前半部分是一个简单的SELECT语句,通过该语句查询所需要的数据,后半段的作用是导出数据,其中,'target_file'参数指出将查询的数据导入到哪个文件;OPTION参数可选的几个选项如下:
| 选项 | 含义 |
|---|---|
FIELDS TERMINATED BY 'str' | 设置字符串的分隔符,默认值是'\t',其中str表示字符串 |
FIELDS ENCLOSED BY 'str' | 设置字符来括上字段的值,默认情况下不使用任何符号 |
FIELDS OPTIONALLY ENCLOSED BY 'str' | 设置字符来括上CHAR、VARCAHR、TEXT等字符型字段,默认情况下不使用任何符号 |
FIELDS ESCAPED BY 'str' | 设置转义字符,默认情况下是\ |
LINES STARTING BY 'str' | 设置每行开头的字符,默认情况下无任何字符 |
LINES TERMINATED BY 'str' | 设置每行的结束符,默认是\n |
使用此语句时,指定的目标路径只能是MySQL的secure_file_priv参数所指定的路径,获取此路径的语法如下。
SELECT @@secure_file_priv;secure_file_priv参数用于限制LOAD DATA,SELECT ... OUTFILE,LOAD_FILE()传到哪个指定目录。
secure_file_priv为NULL时,表示限制mysqld不允许导入或导出。secure_file_priv参数为/tmp时,表示限制mysqld只能在/tmp目录下执行导入或导出,其他目录不能执行。secure_file_priv没有值时,表示不限制mysqld在任意目录的导入或导出。

从上图可看到,该值为NULL,表示限制mysqld导入或导出。此时可以在my.ini文件中添加secure_file_priv=''一行即可。设置完成后重启MySQL并重新登录,再次查看该值,如下图,即可导出数据。

例:
select * from db_stu.tb_stu into outfile 'A:\stu1.txt'
fields terminated by ',' optionally enclosed by '\"'
lines starting by '\>' terminated by '\r\n';其中\"、\>都为转义字符,\r\n是Windows系统的分隔符。


执行成功后,打开A盘下的stu1.txt文件即可查看保存的文本文件。
使用mysqldump命令导出文本文件
语法如下。
mysqldump -u root -p -T 目标目录 dbname table [option];其中“目标目录”参数指出文本文件的路径;dbname参数表示数据库的名称;table参数表示表的名称;option表示附件选项,具体如下:
--fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是``\t`。--fields-enclosed-by=字符串:设置字符来括上字段的值。--fields-optionally-enclosed-by=字符:设置字符括上CHAR、VARCHAR和TEXT等字符型字段。--fields-escaped-by=字符:设置转义字符。--lines-terminated-by=字符:设置每行结束符
有些时候这些字符必须用双引号括起来,否则MySQL数据库系统将不能识别这几个参数。
mysqldump命令还可以导出为XML文件,语法如下。
mysqldump -u root -p --xml | -X dbname table > E:\name.xml使用mysql命令导出文本文件
mysql命令可以用来登录MySQL服务器和还原备份文件,除此之外还可以用来导出为文本文件。语法如下。
mysql -u root -p -e "select 语句" db_name > name.txt;其中,-e选项代表执行SQL语句,"select 语句"代表查询语句。
如我们将tb_stu表存到A盘中,语法如下。
mysql -u root -p -e "select * from tb_stu" db_stu > A:/stu3.txt

可以看到,我们成功保存了。
mysql命令还可以导出XML文件或HTML文件,语法如下。
mysql -u root -p --xml | -X -e "select 语句" dbname > name.xml
mysql -u root -p --html | -H -e "select 语句" dbname > name.html如我们将tb_stu表导出为html文件,语法如下。
mysql -u root -p --html -e "select * from tb_stu" db_stu > A:\stu.html

从运行结果可以看到,导出的数据变成了一张数据表。
用LOAD DATA INFILE命令将文本文件导入数据表
语法如下。
LOAD DATA [LOW_PRIORITY|CONCURRENT] [LOCAL] INFILE file_name INTO TABLE table_name [OPTION];参数说明如下表。
| 参数 | 含义 |
|---|---|
| LOW_PRIORITY | 若指定此参数,则LOAD DATA语句会被延迟,直到没有其他的客户端正在读取表 |
| CONCURRENT | 若指定此参数,则当LOAD DATA正在执行时,其他线程可以同时使用此表的数据 |
| LOCAL | 若指定此参数,则文件会被主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径名称,以指定其确切的位置。若给定的是一个相对路径名称,则此名称会被理解成相对于启动客户端时所在的目录。若没有指定此参数,则文件必须位于服务器主机上,并且会被服务器直接读取。使用此参数时速度会略慢。 |
| file_name | 用来指定导入的文本文件得路径和名称。这个文件可以手动创建,也可以使用其他的程序创建。可以使用绝对路径,也可以不指定路径,直接指定文件名,这时服务器会在默认数据库路径中查找并读取 |
| table_name | 用来指定需要导入数据的表名,该表在数据库中必须存在,表结构必须与导入文件的数据一致 |
| OPTION | 用于设置相应的选项,其值可以是下面9个值中的任意一个 |
| 值 | 含义 |
|---|---|
FIELDS TERMINATED BY '字符串' | 用于指定字段分隔符为此字符串,默认是\t |
FILED ENCLOSED BY '字符串' | 用于设置字符串括上每个字段的值,默认不设置任何字符 |
FIELDS OPTIONALLY ENCLOSEDBY '字符串' | 用于设置括上CHAR、VARCHAR和TEXT类型的字段值的符号,默认不使用任何符号 |
FILEDS ESCAPED BY '字符串' | 用来设置转义字符的字符符号,默认是\ |
LINES STARTING BY 字符串 | 用来设置每行开头的字符串,默认不设置任何字符 |
LINES TERMINATED BY '字符串' | 设置每行结束的字符串,默认使用\n |
IGNORE n LINES | 忽略文件的前n条记录 |
(字段列表) | 用于实现根据字段列表中的字符和顺序加载记录 |
SET column=expr | 用于设置列的转换方式,即所指定的列要经过转换才会被加载 |
在使用该命令时,必须根据要导入文本文件中字段值的分隔符来指定使用的分隔符;并且如果文本文件中的字段顺序和表的字段顺序不一致时,就需要使用
(字段列表)参数来指定加载字段的顺序。
如我们使用LOAD DATA ... INFILE命令导入如下的学生表。

load data infile 'A:/tb_stu.txt' into table new_tb_stu
character set 'utf8' -- 若出现乱码,可将读取方式改为utf8
fields terminated by ',' enclosed by '\"'
lines starting by '\>' terminated by '\r\n';

用mysqlimport命令导入文本文件
在MySQL中,若只是恢复数据,则可以命令行窗口中使用mysqlimport实现。语法如下。
mysqlimport -u root -p database filename [option];OPTION参数的几个可用值如下表。
| 值 | 含义 |
|---|---|
--fields-terminated-by='str' | 以字符串str作为字段的分隔符,默认为\t |
--fields-enclosed-by='str' | 用字符串str括上每个字段的值,默认不使用任何字符 |
--fields-optionally-enclosed-by='str' | 用字符串str括上CHAR、VARCHAR和TEXT类型字段的值, 默认不使用任何字符 |
--fields-escaped-by='str' | 设置字符串str为转义字符 |
--lines-terminated-by='str' | 设置每行的结束符为str |
--ingore-lines=n | 忽略前n行的数据 |
在MySQL中,表名和字符串可以使用反引号括起来,但是这不是必须的,但若表名或字符串是MySQL中的某个关键字,那么就必须使用反引号将其括起来。
性能优化是指通过某些有效的方法提升MySQL数据库的性能。性能优化的目的是使MySQL数据运行速度更快、占用的磁盘空间更小。性能优化有很多方面,如优化查询速度、优化更新速度和优化MySQL服务器等。当表中的记录很少时,MySQL的性能差别很小,只有在大量用户使用、记录很大、运行时间很长时,MySQL的性能差别才开始体现出来。若用户在查询或者添加数据时因为MySQL的性能很差而导致响应速度变慢,用户很难喜欢这个网站。因此为了提高MySQL的性能,就要对MySQL进行性能优化。如若大量用户想要进行查询操作,就要对查询语句进行优化;若大量用户想要进行更新操作,就要对更新语句进行优化。下面介绍各种情况如何进行优化。