mysql LOAD DATA INFILE 批量导入文件

在MySQL数据库中,当我们需要将大量数据导入到数据库表中时,使用LOAD DATA INFILE语句是一种高效且方便的方法。本文将介绍LOAD DATA INFILE的使用方法,并提供代码示例。

LOAD DATA INFILE语句的介绍

LOAD DATA INFILE语句用于将外部文件的数据导入到MySQL数据库表中。它可以从文本文件、CSV文件、TSV文件等导入数据,并将其插入到指定的表中。这个过程通常比逐条插入数据要快得多。

以下是LOAD DATA INFILE语句的语法:

LOAD DATA INFILE 'file_path'
[REPLACE | IGNORE]
INTO TABLE table_name
[CHARACTER SET charset_name]
FIELDS TERMINATED BY '\t'
[OPTIONALLY] ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE n LINES
(column1, column2, column3, ...)
  • file_path:指定要导入的文件路径。
  • REPLACE:如果导入的数据中存在重复记录,使用该关键字将替换原有的记录。
  • IGNORE:如果导入的数据中存在重复记录,使用该关键字将忽略导入的记录。
  • table_name:指定要插入数据的表名。
  • charset_name:指定字符集名称。
  • FIELDS TERMINATED BY '\t':指定字段之间的分隔符,通常是制表符。
  • ENCLOSED BY '"':指定字段的引号字符,通常是双引号。
  • LINES TERMINATED BY '\n':指定行之间的分隔符,通常是换行符。
  • IGNORE n LINES:指定要忽略的文件头行数。
  • (column1, column2, column3, ...):指定要导入数据的列。

示例

假设我们有一个包含学生信息的CSV文件,文件路径为/path/to/students.csv,文件内容如下:

"John Doe",20,"male"
"Jane Smith",19,"female"
"Michael Johnson",21,"male"

我们将使用以下表结构来存储学生信息:

CREATE TABLE students (
    name VARCHAR(50),
    age INT,
    gender VARCHAR(10)
);

我们可以使用以下代码将CSV文件中的数据导入到students表中:

LOAD DATA INFILE '/path/to/students.csv'
INTO TABLE students
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

解析以上代码:

  • LOAD DATA INFILE '/path/to/students.csv':指定要导入的文件路径。
  • INTO TABLE students:指定要插入数据的表名。
  • FIELDS TERMINATED BY ',':指定CSV文件中字段之间的分隔符。
  • ENCLOSED BY '"':指定CSV文件中字段的引号字符。
  • LINES TERMINATED BY '\n':指定行之间的分隔符。
  • IGNORE 1 LINES:忽略CSV文件中的第一行(表头)。

运行以上代码后,CSV文件中的数据将被插入到students表中。

使用REPLACEIGNORE

在某些情况下,导入的数据可能与表中已有的数据存在重复。在这种情况下,我们可以使用REPLACEIGNORE关键字来处理重复数据。

  • 使用REPLACE关键字:如果导入的数据与表中的数据存在重复,将替换原有的记录。

    LOAD DATA INFILE '/path/to/students.csv'
    REPLACE
    INTO TABLE students
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES;
    
  • 使用IGNORE关键字:如果导入的数据与表中的数据存在重复,将忽略导入的记录。

    LOAD DATA INFILE '/path/to/students.csv'
    IGNORE
    INTO TABLE students
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES;
    

总结

使用LOAD DATA INFILE语句可以方便地将外部文件中的数据批量