MySQL存储过程是一种预编译的SQL代码块,可以在数据库中存储并重复调用。存储过程可以包含一系列的SQL语句和控制结构,用于执行复杂的数据库操作。批量插入(Batch Insert)是指一次性插入多条记录到数据库中,而不是逐条插入。
MySQL存储过程批量插入主要有以下几种类型:
批量插入适用于以下场景:
以下是一个简单的MySQL存储过程示例,用于批量插入数据:
DELIMITER //
CREATE PROCEDURE BatchInsert(IN tableName VARCHAR(255), IN data JSON)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE rowCount INT;
DECLARE record JSON;
DECLARE columns VARCHAR(1000);
DECLARE values VARCHAR(1000);
SET rowCount = JSON_LENGTH(data);
WHILE i < rowCount DO
SET record = JSON_EXTRACT(data, CONCAT('$[', i, ']'));
SET columns = '';
SET values = '';
-- 动态生成列名和值
SELECT GROUP_CONCAT(JSON_UNQUOTE(JSON_EXTRACT(record, CONCAT('$."', column_name, '"'))) ORDER BY column_name SEPARATOR ', ')
INTO columns FROM information_schema.COLUMNS
WHERE table_name = tableName;
SELECT GROUP_CONCAT(JSON_UNQUOTE(JSON_EXTRACT(record, CONCAT('$."', column_name, '"'))) ORDER BY column_name SEPARATOR ', ')
INTO values FROM information_schema.COLUMNS
WHERE table_name = tableName;
-- 执行插入操作
SET @sql = CONCAT('INSERT INTO ', tableName, ' (', columns, ') VALUES (', values, ')');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
LOAD DATA INFILE
语句进行批量导入。JSON_EXTRACT
和JSON_UNQUOTE
函数处理JSON数据。通过以上方法,可以有效解决MySQL存储过程批量插入过程中遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云