You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Bash脚本通过LOAD DATA LOCAL INFILE批量导入CSV到MySQL

参数化Bash脚本批量导入CSV到数据库

以下是满足需求的参数化Bash脚本,支持批量遍历指定文件夹内的CSV文件,通过LOAD DATA LOCAL INFILE命令导入到目标数据库表:

#!/bin/bash

# 校验参数数量
if [ $# -ne 4 ]; then
    echo "用法: $0 <InputFolderPath> <DatabaseConnection> <SchemaName> <TableName>"
    echo "示例: $0 /home/user/csv_files 'mysql -u admin -pMyPass123 --local-infile=1 -h db-host' my_db sales_data"
    exit 1
fi

INPUT_FOLDER="$1"
DB_CONN_CMD="$2"
TARGET_SCHEMA="$3"
TARGET_TABLE="$4"

# 遍历目标文件夹下所有CSV文件
for csv_path in "$INPUT_FOLDER"/*.csv; do
    # 处理文件夹无CSV文件的情况
    [ -f "$csv_path" ] || continue

    echo "开始导入: $csv_path"

    # 执行数据库导入命令
    $DB_CONN_CMD -e "
    USE $TARGET_SCHEMA;
    LOAD DATA LOCAL INFILE '$csv_path'
    INTO TABLE $TARGET_TABLE
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;
    "

    # 反馈导入结果
    if [ $? -eq 0 ]; then
        echo "$csv_path 导入完成"
    else
        echo "$csv_path 导入失败,请检查文件格式或数据库配置"
    fi
done

核心说明

参数定义

  • InputFolderPath:存放待导入CSV文件的文件夹绝对/相对路径
  • DatabaseConnection:完整的数据库连接命令(以MySQL为例),需包含必要的认证、主机及LOCAL INFILE启用参数
  • SchemaName:目标数据库(或Schema)名称
  • TableName:接收数据的目标表名

自定义配置项

根据你的CSV格式,可修改LOAD DATA语句中的以下参数:

  • FIELDS TERMINATED BY ',':字段分隔符(如制表符可改为'\t')
  • ENCLOSED BY '\"':字段包裹符(若CSV无包裹符可删除此行)
  • IGNORE 1 ROWS:跳过表头行(无表头则删除此行)

必要前提

  • 数据库客户端需启用LOCAL INFILE支持(MySQL需在连接命令中添加--local-infile=1)
  • 执行脚本的用户需具备CSV文件读取权限,以及数据库表的写入权限
  • 目标表结构需与CSV字段顺序、类型匹配

内容的提问来源于stack exchange,提问作者RobinHood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:25:18