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

如何用MySQL循环批量创建同结构表并导入本地CSV数据?

MySQL循环创建同结构表并批量导入CSV的存储过程实现

存储过程代码

以下是适配A1-A20表名及对应CSV文件的批量操作存储过程:

DELIMITER //

CREATE PROCEDURE BatchCreateTablesAndImport()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE table_name VARCHAR(50);
    DECLARE csv_path VARCHAR(255);
    
    WHILE i <= 20 DO
        -- 生成当前循环的表名(如A1、A2...A20)
        SET table_name = CONCAT('A', i);
        -- 拼接对应CSV文件的绝对路径,替换为你的实际路径
        SET csv_path = CONCAT('/your/csv/storage/path/A', i, '.csv');
        
        -- 复制表A的结构创建新表(IF NOT EXISTS避免重复创建报错)
        SET @create_sql = CONCAT('CREATE TABLE IF NOT EXISTS ', table_name, ' LIKE A');
        PREPARE create_stmt FROM @create_sql;
        EXECUTE create_stmt;
        DEALLOCATE PREPARE create_stmt;
        
        -- 构造导入数据的SQL,根据CSV实际格式调整参数
        SET @load_sql = CONCAT(
            'LOAD DATA LOCAL INFILE ''', csv_path, ''' ',
            'INTO TABLE ', table_name, ' ',
            'FIELDS TERMINATED BY '','' ', -- CSV字段分隔符,默认逗号,按需修改
            'OPTIONALLY ENCLOSED BY ''"'' ', -- 若字段带双引号包裹,保留此句
            'LINES TERMINATED BY ''\n'' ', -- 行分隔符,Windows环境换成'\r\n'
            'IGNORE 1 LINES' -- 若CSV第一行是表头则忽略,无表头则删除此句
        );
        PREPARE load_stmt FROM @load_sql;
        EXECUTE load_stmt;
        DEALLOCATE PREPARE load_stmt;
        
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

执行存储过程

存储过程创建完成后,直接调用即可启动批量操作:

CALL BatchCreateTablesAndImport();

关键注意事项

  • 开启local_infile支持:先执行SET GLOBAL local_infile = 1;,且连接MySQL客户端时需添加--local-infile=1参数(如命令行:mysql -u your_username -p --local-infile=1)
  • 权限要求:执行存储过程的用户需拥有CREATE TABLE权限、FILE权限,以及目标数据库的读写权限
  • 文件路径适配:务必替换代码中的/your/csv/storage/path/为你的CSV实际存放路径,同时保证MySQL服务进程能读取该路径下的文件(Linux下注意给mysql用户赋读权限)
  • CSV格式调整:根据实际CSV的分隔符、表头情况修改LOAD DATA中的参数,比如字段用制表符分隔时,将TERMINATED BY ','改为TERMINATED BY '\t'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:55:19