使用 LOAD DATA INFILE 将 CSV 文件导入运行在容器中的 MySQL

要使用 LOAD DATA INFILE 将 CSV 文件导入运行在容器中的 MySQL,并处理 CSV 文件中的 null 值,你可以遵循以下步骤:

1. 准备 CSV 文件

确保 CSV 文件的格式与你要导入的 MySQL 表格结构相匹配。对于 null 值,确保 CSV 文件中的 null 值以你选择的格式表示(例如,空字符串、特定的文本如'NULL'等)。

2. 复制 CSV 文件到容器

首先,你需要将 CSV 文件从宿主机复制到运行 MySQL 的容器内。使用 Docker 的 cp 命令来完成这个步骤。

sh 复制代码
docker cp /path/to/yourfile.csv my-mysql-container:/path/in/container

这里,/path/to/yourfile.csv 是宿主机上的 CSV 文件路径,my-mysql-container 是你的 MySQL 容器的名称或 ID,/path/in/container 是容器内的目标路径。

3. 导入 CSV 文件

然后,进入 MySQL 容器的命令行界面并执行 LOAD DATA INFILE 命令。

首先,进入容器的交互式 shell:

sh 复制代码
docker exec -it my-mysql-container bash

然后,在 MySQL 命令行中执行类似下面的 SQL 命令来导入数据:

sql 复制代码
LOAD DATA INFILE '/path/in/container/yourfile.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(column1, column2, @var3, column4, ...)
SET column3 = NULLIF(@var3,'NULL');

在这个命令中,your_table 是目标表名,column1, column2, @var3, column4, ... 是表中的列。对于可能包含 null 值的列(假设这里是 column3),使用一个变量(如 @var3)来接收原始数据,然后使用 SET 子句和 NULLIF 函数来把表示 null 的特定文本转换为真正的 null 值。在这个例子中,如果 @var3 的值是 'NULL',它将被转换为 SQL 的 NULL

4. 注意

  • 确保在 LOAD DATA INFILE 语句中正确设置字段分隔符、文本定界符和行终止符,以匹配 CSV 文件的格式。
  • 考虑到权限问题,你可能需要使用 LOCAL 关键字(即 LOAD DATA LOCAL INFILE),但这取决于你的 MySQL 配置和 Docker 容器设置。
  • 如果 CSV 文件中第一行是列标题,使用 IGNORE 1 LINES 来忽略它。如果没有列标题,则移除这部分。
  • 在执行这些步骤之前,请确保你有足够的权限来执行 SQL 命令,并且你的 MySQL 用户有足够的权限来读取文件。
相关推荐
亭台烟雨中2 分钟前
SQL优化简单思路
数据库·sql
老华带你飞1 小时前
畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·畅阅读系统小程序
Codeking__3 小时前
mysql基础——库与表的操作
数据库·mysql
_苏沐3 小时前
cte功能oracle与pg执行模式对比
数据库·oracle
silver98864 小时前
再谈golang的sql链接dsn
mysql·golang
qq_508823408 小时前
金融数据库--3Baostock
数据库·金融
悦数图数据库8 小时前
图技术重塑金融未来:悦数图数据库如何驱动行业创新与风控变革
数据库·金融
九河云8 小时前
华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航
网络·数据库·科技·金融·华为云·gaussdb
老华带你飞8 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
ouou061711 小时前
企业级NoSql数据库Redis集群
数据库·redis·nosql