📅  最后修改于: 2020-11-27 06:44:18             🧑  作者: Mango
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子句可以指定除TERMINATED BY之外的其他格式选项。默认情况下,LOAD DATA假设值是不带引号的,并解释反斜线(\)作为特殊字符转义字符。要明确指示值引号字符,请使用ENCLOSED BY命令。 MySQL将在输入处理期间从数据值的末尾去除该字符。要更改默认的转义字符,请使用ESCAPED BY 。
当你指定括BY,表明引号字符应该从数据值被剥离,有可能增加一倍,或通过与转义字符之前,它确实包含数据值中的引号字符。
例如,如果引号和转义字符为“和\,则输入值” a“” b \“ c”将解释为“ b” c 。
对于mysqlimport ,用于指定引号和转义值的相应命令行选项是–fields-enclosed-by和–fields-escaped-by 。