准备工作
-
CSV文件规范
- 文件必须是标准CSV格式(逗号分隔,文本用双引号包裹)
- 列顺序需与目标表字段一致(或通过命令指定映射)
- 示例文件
data.csv
内容:id,name,email 1,"张三","zhangsan@example.com" 2,"李四","lisi@test.org"
-
数据库端准备
- 创建目标表(字段类型匹配CSV数据):
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
- 确保MySQL用户有
FILE
权限(检查权限命令):SHOW GRANTS FOR 'your_user'@'localhost';
- 创建目标表(字段类型匹配CSV数据):
通过MySQL命令行导入(高效推荐)
步骤:
-
登录MySQL:
mysql -u root -p
-
执行导入命令(关键参数说明):
LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users FIELDS TERMINATED BY ',' -- 分隔符为逗号 OPTIONALLY ENCLOSED BY '"' -- 文本引号为双引号 LINES TERMINATED BY 'n' -- 换行符(Windows需设为'rn') IGNORE 1 LINES; -- 忽略首行标题
路径问题处理:
- 如果报错
ERROR 1290
,需将CSV文件移至MySQL安全目录:SHOW VARIABLES LIKE 'secure_file_priv'; -- 查询允许路径
将文件复制到返回的目录(如
/var/lib/mysql-files/
)后重试。
- 如果报错
通过MySQL Workbench导入(图形化操作)
- 右键点击目标表 → Table Data Import Wizard
- 选择CSV文件 → 配置选项:
- Format: CSV
- Field Separator:
- Text Qualifier:
- 勾选
Ignore first line
)
- 匹配列映射:确保CSV列与表字段对应
- 点击 Next → Apply 执行导入
常见错误及解决方案
错误类型 | 原因 | 解决方法 |
---|---|---|
ERROR 1290 |
文件不在安全目录 | 移动文件至 secure_file_priv 指定路径 |
ERROR 1062 |
主键/唯一键冲突 | 删除重复数据或添加 IGNORE 关键字 |
中文乱码 | 文件编码非UTF-8 | 用文本编辑器将CSV另存为UTF-8格式 |
列数不匹配 | CSV与表结构不一致 | 调整CSV列或使用SET 手动映射字段(例: LOAD DATA ... (col1,col2) ) |
安全与优化建议
- 必做备份:导入前备份表防止误操作
CREATE TABLE users_backup AS SELECT * FROM users;
- 性能提升:大文件导入时临时禁用索引
ALTER TABLE users DISABLE KEYS; -- 执行导入命令 -- ALTER TABLE users ENABLE KEYS;
- 防注入风险:避免直接导入来源不可信的CSV(可能含恶意SQL)
- 命令行适合批量处理大文件,需注意文件路径和权限
- Workbench适合初学者,可视化操作更直观
- 始终验证数据完整性:导入后执行
SELECT COUNT(*) FROM users
核对行数
引用说明:本文操作基于MySQL 8.0官方文档[1],安全规范参考OWASP数据注入防护指南[2]。
[1] MySQL LOAD DATA Syntax: https://dev.mysql.com/doc/refman/8.0/en/load-data.html
[2] OWASP Data Validation: https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/40196.html