日期:2014-05-16  浏览次数:20861 次

MySQL心得8-2-使用SQL语句备份和恢复表数据(非重点)

1. 使用SQL语句备份和恢复表数据(提一下,不细讲)

用户可以使用SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中,并用LOAD DATA …INFILE语句恢复数据。但是这种方法只能导出或导入数据的内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构。

SELECT INTO…OUTFILE格式:

SELECT *  INTO OUTFILE 'file_name' export_options

          |DUMPFILE 'file_name'

其中,export_options为:

[FIELDS

       [terminated BY 'string']

       [[optionally] ENCLOSED BY 'char']

       [escaped BY 'char' ]

]

[LINES TERMINATED BY 'string' ]

说明:

这个语句的作用是将表中SELECT语句选中的行写入到一个文件中,file_name是文件的名称。文件默认在服务器主机上创建,并且文件名不能是已经存在的(这可能将原文件覆盖)。如果要将该文件写入到一个特定的位置,则要在文件名前加上具体的路径。在文件中,数据行以一定的形式存放,空值用“\N”表示。

使用OUTFILE时,可以在export_options中加入以下两个自选的子句,它们的作用是决定数据行在文件中存放的格式:

●  fields子句:在FIELDS子句中有三个亚子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,则这三个亚子句中至少要指定一个。

(1)TERMINATED BY用来指定字段值之间的符号,例如,“TERMINATED BY ','”指定了逗号作为两个字段值之间的标志。

(2)ENCLOSED BY子句用来指定包裹文件中字符值的符号,例如,“ENCLOSED BY ' " '”表示文件中字符值放在双引号之间,若加上关键字OPTIONALLY表示所有的值都放在双引号之间。

(3)ESCAPED BY子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。

●   LINES子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为结束标志。

如果FIELDS和LINES子句都不指定,则默认声明以下子句:

FIELDS TERMINATED BY '\t'ENCLOSED BY '' ESCAPED BY '\\'

LINES TERMINATED BY '\n'

如果使用DUMPFILE而不是使用OUTFILE,导出的文件里所有的行都彼此紧挨着放置,值和行之间没有任何标记,成了一个长长的值。

5.LOAD DATA …INFILE语句是SELECT INTO…OUTFILE语句的补语,该语句可以将一个文件中的数据导入到数据库中。

LOAD DATA …INFILE格式:

LOAD DATA [LOW_PRIORITY | concurrent][LOCAL] INFILE 'file_name.txt'