MySQL 数据库导入
在MySQL中有两种简单的方式将数据从以前备份的文件中加载到MySQL数据库中。
使用LOAD DATA导入数据
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);
使用mysqlimport导入数据
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 *****
处理引号和特殊字符
字段子句可以指定除了 TERMINATED BY 之外的其他格式选项。默认情况下,LOAD DATA假设值未加引号,并将反斜杠(\)解释为转义字符用于特殊字符。要显式指定值引号字符,请使用 ENCLOSED BY 命令。MySQL将在输入处理过程中去除数据值两端的该字符。要更改默认转义字符,请使用 ESCAPED BY 。
当您指定ENCLOSED BY以指示引号字符应从数据值中去除时,可以通过将其两次重复或在其前面加上转义字符来在数据值中包含引号字符。
例如,如果引号和转义字符分别是”和\,则输入值 “a””b\”c” 将被解释为 a”b”c 。
对于mysqlimport,指定引号和转义值的相应命令行选项分别是 --fields-enclosed-by 和 --fields-escaped-by 。