使用 LOAD DATA INFILE 导入 CSV 数据
在这一步中,你将学习如何使用 LOAD DATA INFILE
语句将数据从 CSV 文件导入到 MySQL 表中。这是一种将大量数据加载到数据库中的高效方法。
在开始之前,让我们创建一个名为 employees.csv
的简单 CSV 文件,其中包含员工数据。打开终端并使用 nano
创建该文件:
nano ~/project/employees.csv
现在,将以下数据粘贴到 employees.csv
文件中:
1,John,Doe,[email protected],Sales
2,Jane,Smith,[email protected],Marketing
3,Peter,Jones,[email protected],Engineering
4,Mary,Brown,[email protected],HR
按 Ctrl+X
,然后按 Y
,再按 Enter
保存文件。
接下来,我们需要连接到 MySQL 服务器。打开终端并执行以下命令,以 root
用户身份连接到 MySQL 服务器。系统可能会提示你输入 root 密码,在默认的 LabEx 虚拟机设置中,该密码通常为空。
mysql -u root -p
如果提示输入密码,而你尚未设置密码,只需按 Enter
。
现在,让我们创建一个名为 company
的数据库,并在该数据库中创建一个名为 employees
的表。在 MySQL shell 中执行以下 SQL 语句:
CREATE DATABASE IF NOT EXISTS company;
USE company;
CREATE TABLE IF NOT EXISTS employees (
id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100),
department VARCHAR(50)
);
现在我们已经设置好了数据库和表,可以使用 LOAD DATA INFILE
语句从 employees.csv
文件中导入数据。在 MySQL shell 中执行以下 SQL 语句:
LOAD DATA INFILE '/home/labex/project/employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
让我们来分解一下这个语句:
LOAD DATA INFILE '/home/labex/project/employees.csv'
:指定 CSV 文件的路径。重要提示: 使用文件的绝对路径。
INTO TABLE employees
:指定要将数据导入的表。
FIELDS TERMINATED BY ','
:指定 CSV 文件中的字段由逗号分隔。
ENCLOSED BY '"'
:指定字段由双引号括起来(如果适用)。在我们的例子中,这不是严格必需的,但包含它是一个好习惯。
LINES TERMINATED BY '\n'
:指定 CSV 文件中的每一行代表一个新行,并且行由换行符终止。
IGNORE 1 ROWS
:如果你的 CSV 文件有标题行,这一点很重要。它告诉 MySQL 跳过文件的第一行。我们的 employees.csv
文件 没有 标题行,所以我们应该删除这一行。
让我们再次尝试 LOAD DATA INFILE
语句,这次不使用 IGNORE 1 ROWS
子句:
LOAD DATA INFILE '/home/labex/project/employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
要验证数据是否已正确导入,请执行以下 SQL 语句:
SELECT * FROM employees;
你应该会在 MySQL shell 中看到 employees.csv
文件中的数据。
最后,退出 MySQL shell:
exit