HOWTO · MySQL

将 Excel 文件导入 MySQL 数据库

你将了解将数据从 excel 文件导入 MySQL 数据库的不同且最简单的方法。

本页内容

要将 Excel 工作簿导入 MySQL,可以先将工作表另存为 CSV,再通过 LOAD DATA 或 phpMyAdmin 导入;也可以使用 Sqlizer.io 将工作簿转换为 SQL。两种 CSV 导入方式都要求目标表结构兼容;Sqlizer.io 则直接处理工作簿,但运行生成的 SQL 前应先检查。以下步骤使用包含 id、firstname、lastname、gender 和 city 列的学生表。

使用 LOAD DATA 语句导入数据

将工作表另存为 CSV(逗号分隔)。检查 CSV 的列与目标表的列在顺序和含义上是否一致。此示例假设 CSV 有标题行、字段以逗号分隔、文本用双引号括起,并使用 Unix 换行符;目标表为空是首次导入的前提。再次导入时,表中已有的数据可能会造成重复行,除非先删除这些行或配置了重复数据处理方式。请根据实际保存的文件调整格式选项。

导入前,可以使用 Python 标准库预览一条有代表性的 CSV 数据。此示例使用一行数据,其列名与示例表相同:

import csv
from io import StringIO

sample = StringIO("id,firstname,lastname,gender,city\n1,Ada,Lovelace,F,London\n")
row = next(csv.DictReader(sample))
print(f"{row['firstname']} {row['lastname']} — {row['city']}")
Ada Lovelace — London

此预览用于检查程序是否按预期读取标题和数据值;它不会连接到 MySQL,也不能替代下方的导入语句。

MySQL 8.0.27 示例使用 Windows 服务器的上传目录。LOAD DATA INFILE 会从 MySQL 服务器的文件系统读取指定路径,因此服务器必须能够访问该文件,并且该路径须符合 secure_file_priv 设置的限制。在 MySQL Workbench 中,请在连接到该服务器的查询标签页中运行语句;Workbench 不会自动让服务器访问工作站上的路径。使用命令行客户端时,同样适用服务器端路径规则。如果使用 LOAD DATA LOCAL INFILE,则由客户端读取并发送文件,而且客户端和服务器的设置都必须允许本地加载。如果访问被拒绝,请参阅 MySQL 的 LOAD DATA 安全指南。

对于示例文件,导入语句为 LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/students.csv' INTO TABLE tb_students FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;。请根据你的环境替换路径、表名、分隔符、文本括定符和行结束符。对于制表符分隔的数据,使用 FIELDS TERMINATED BY '\t';对于以单个空格分隔的数据,使用 FIELDS TERMINATED BY ' '。Windows CSV 文件通常使用 \r\n 作为行结束符;如果数据行未按预期拆分,请改用文件实际使用的行结束符。IGNORE 1 ROWS 会跳过标题行,但不会根据列名匹配字段。如果文件不包含 id,或列顺序不同,请在表名后指定对应的目标列,并确认自动生成的值会按预期处理。

导入后,可在 Workbench 中检查数据表,或运行查询 SELECT id, firstname, lastname, gender, city FROM tb_students LIMIT 10;。将查询结果与 CSV 中的数据进行比较,并在使用数据前核对已导入的行数。

将工作表另存为 CSV

CSV 文件中的数据

MySQL 中的表数据

命令行中的新建表

命令行中的 LOAD DATA 命令

命令行中的 LOAD DATA 输出

方法二:使用 Sqlizer.io 导入数据

如果不想先将工作簿另存为 CSV,可以使用 Sqlizer.io 进行转换。选择工作簿和目标数据库类型 MySQL,然后指定第一行是否包含标题。选择当前工作表或输入工作表名称(例如 students),再选择要转换的整个工作表或单元格范围。设置目标表名称并生成 SQL。

运行生成的语句前,请先检查:确认表定义、列名、数据值,以及创建表或检查表是否存在的行为都符合预期。然后对目标数据库运行 SQL,并检查表中的数据,将有代表性的行与工作簿进行比较。工作簿可能包含机密数据;上传到外部转换服务前,请考虑数据敏感性和该服务的条款。

Sqlizer.io

Sqlizer.io 生成的查询

Sqlizer.io 查询中的数据

方法三:使用 phpMyAdmin 导入数据

这种方式同样使用 CSV 文件。将工作表另存为 CSV,然后打开目标数据库,并选择列与 CSV 匹配的数据表。示例表 tb_students_phpmyadmin 包含 id、firstname、lastname、gender 和 city 列。在 phpMyAdmin 中,打开该表的 Import 标签页,选择 CSV 文件,并将格式设为 CSV。设置与文件相符的格式选项,包括字段分隔符、文本括定符、行结束符,以及是否跳过标题行。点击 Go 开始导入。

如果 CSV 的列与数据表不匹配,请在导入前修正数据表或文件;仅选择 CSV 格式并不会按标题名称匹配列。导入完成后,浏览数据表或运行查询,抽查多个值并将行数与源文件进行比较。

使用 phpMyAdmin 导入数据:第 1 步

使用 phpMyAdmin 导入数据:第 2 步

使用 phpMyAdmin 导入数据:第 3 步

使用 phpMyAdmin 导入数据:第 4 步

结论

如果能将工作表另存为 CSV,且 MySQL 服务器可以访问该文件,可选择 LOAD DATA;如果希望通过浏览器导入 CSV,可使用 phpMyAdmin。Sqlizer.io 会将工作簿转换为 SQL,供你检查后在目标数据库中运行。无论选择哪种方式,都要确保源数据的列和格式与目标表匹配,并核对插入的行。