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 *****
  • 处理引号和特殊字符

    FIELDS子句可以指定除TERMINATED BY之外的其他格式选项。默认情况下,LOAD DATA假定值未加引号,并将反斜杠(\)解释为特殊字符的转义字符。要明确指示值引号字符,请使用ENCLOSED BY命令。MySQL将在输入处理期间从数据值的末尾去除该字符。要更改默认的转义字符,请使用ESCAPED BY。当您指定ENCLOSED BY以指示应从数据值中删除引号字符时,可以通过将其加倍或在其前面加上转义字符来在数据值中实际包括引号字符。例如,如果引号和转义字符为"和\,则输入值"a""b\"c"将解释为 a"b"c。对于mysqlimport,用于指定引号和转义值的相应命令行选项是--fields-enclosed-by和--fields-escaped-by。