MySQL批量导入多个CSV文件

在处理大量数据时,MySQL数据库是一个非常强大而方便的工具。当我们有多个CSV文件需要导入到数据库中时,一次性导入可以大大提高效率。本文将介绍如何使用MySQL批量导入多个CSV文件,并提供相应的代码示例。

准备工作

在开始之前,我们需要确保以下几点:

  1. 已经安装了MySQL数据库。
  2. 需要导入的CSV文件已经准备好,且符合数据库表的结构要求。
  3. 确保MySQL服务器已经运行。

导入单个CSV文件

首先,我们先来看一下如何导入单个CSV文件到MySQL数据库中。假设我们有一个名为people.csv的文件,包含了idnameage三个字段,我们需要将其导入到名为people的表中。

创建表

首先,我们需要创建一个名为people的表,用于存储CSV文件的数据。可以使用以下SQL语句在MySQL数据库中创建该表:

CREATE TABLE people (
  id INT PRIMARY KEY,
  name VARCHAR(100),
  age INT
);

导入CSV文件

接下来,我们使用MySQL的LOAD DATA INFILE语句将CSV文件导入到表中。可以使用以下SQL语句导入people.csv文件:

LOAD DATA INFILE 'people.csv'
INTO TABLE people
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

在上述语句中,LOAD DATA INFILE用于加载CSV文件,INTO TABLE指定了目标表,FIELDS TERMINATED BY ','指定了字段之间的分隔符是逗号,LINES TERMINATED BY '\n'指定了行之间的分隔符是换行符,IGNORE 1 LINES用于忽略CSV文件中的第一行(标题行)。

批量导入多个CSV文件

现在,我们已经了解了如何导入单个CSV文件,下面我们将介绍如何批量导入多个CSV文件。

准备多个CSV文件

首先,我们需要准备多个CSV文件,这些文件应该具有相同的列头和数据结构,以便于导入到同一个表中。

假设我们有以下三个CSV文件:

  • people1.csv
  • people2.csv
  • people3.csv

创建表

与导入单个CSV文件相同,我们需要先创建一个表来存储这些CSV文件的数据。假设我们将使用与之前相同的人员信息表people

批量导入CSV文件

为了批量导入多个CSV文件,我们可以使用MySQL的LOAD DATA INFILE语句结合循环和动态SQL来实现。

以下是一个示例代码,假设我们将多个CSV文件存储在同一个目录下,并按照文件名的顺序来进行导入:

SET @dir = '/path/to/csv/files/';

SET @sql = '';
SET @delimiter = ',';

SELECT GROUP_CONCAT(
  CONCAT(
    'LOAD DATA INFILE \'', @dir, filename, '\' ',
    'INTO TABLE people ',
    'FIELDS TERMINATED BY \'', @delimiter, '\' ',
    'LINES TERMINATED BY \'\\n\' ',
    'IGNORE 1 LINES;'
  )
  SEPARATOR ' '
) INTO @sql
FROM (
  SELECT CONCAT('\'', @dir, filename) AS filename
  FROM (
    SELECT CONCAT('people', ROW_NUMBER() OVER ()) AS filename
    FROM information_schema.tables
    WHERE table_name = 'people'
  ) AS filenames
  UNION ALL
  SELECT CONCAT('\'', @dir, filename) AS filename
  FROM (
    SELECT CONCAT('people', ROW_NUMBER() OVER ()) AS filename
    FROM information_schema.tables
    WHERE table_name = 'people'
  ) AS filenames
) AS filenames;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

在上述代码中,我们首先定义了一个变量@dir,用于指定CSV文件所在的目录。然后,我们使用动态SQL来生成一组LOAD DATA INFILE语句,并将其存储在变量@sql中。最后,我们使用PREPARE语句来准备执行动态SQL,并使用`EXEC