MySQL有两种简单的方法可以将数据从以前备份的文件加载到MySQL数据库中.
MySQL提供了一个LOAD DATA语句,充当批量数据加载器.下面是一个示例语句,它从当前目录中读取文件 dump.txt 并将其加载到当前数据库中的表 mytbl 中.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
如果 LOCAL 关键字不存在,MySQL看起来对于服务器主机上的数据文件,使用查看绝对路径名,它完全指定文件的位置,从文件系统的根开始. MySQL从给定位置读取文件.
默认情况下, LOAD DATA 假定数据文件包含由换行符终止的行(新行)并且行内的数据值由制表符分隔.
要明确指定文件格式,请使用 FIELDS 子句描述一行中字段的特征,以及 LINES 子句来指定行结束序列.以下 LOAD DATA 语句指定数据文件包含由冒号和以回车符和换行符终止的行分隔的值.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl -> FIELDS TERMINATED BY ':' -> LINES TERMINATED BY '\r\n';
LOAD DATA命令假定数据文件中的列与列具有相同的顺序在表中.如果不是这样,您可以指定一个列表以指示应该将数据文件列加载到哪些表列中.假设您的表有列a,b和c,但数据文件中的连续列对应于列b,c和a.
您可以加载文件,如下面的代码块所示.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' -> INTO TABLE mytbl (b, c, a);
MySQL还包括一个名为 mysqlimport 的实用程序作为LOAD DATA的包装器,以便您可以直接从命令行加载输入文件.
将数据从 dump.txt 加载到 mytbl ,在UNIX提示符下使用以下命令.
$ mysqlimport -u root -p --local database_name dump.txt password *****
如果使用 mysqlimport ,命令行选项提供格式说明符.对应于前两个 LOAD DATA 语句的 mysqlimport 命令如下面的代码块所示.
$ mysqlimport -u root -p --local --fields-terminated-by = ":" \ --lines-terminated-by = "\r\n" database_name dump.txt password *****
你指定选项的顺序对mysqlimport无关紧要,除了它们应该全部都在数据库名称之前.
mysqlimport 语句使用 - columns 选项指定列顺序 :
$ mysqlimport -u root -p --local --columns=b,c,a \ database_name dump.txt password *****
FIELDS子句除此之外还可以指定其他格式选项终止.默认情况下,LOAD DATA假定值不加引号,并将反斜杠(\)解释为特殊字符的转义字符.要明确指示值引用字符,请使用 ENCLOSED BY 命令. MySQL将在输入处理期间从数据值的末尾剥离该字符.要更改默认转义字符,请使用 ESCAPED BY .
指定ENCLOSED BY以指示应从数据值中删除引号字符时,可以通过将引号字符加倍或在转义字符前加上它来包含引号字符.
例如,如果引号和转义字符是"和\,则输入值"a""b c"将被解释为 a"b"c .
对于 mysqlimport ,用于指定引号和转义值的相应命令行选项是 - fields-enclosed-by 和 - fields-escaped-by .