MySQL 存储过程是一组预先编译好的 SQL 语句,可以通过调用执行。存储过程可以简化复杂的 SQL 操作,提高代码的重用性和执行效率。
MySQL 存储过程主要分为两类:
存储过程常用于以下场景:
以下是一个简单的 MySQL 存储过程示例,用于批量添加数据:
DELIMITER //
CREATE PROCEDURE BatchInsertData(IN tableName VARCHAR(255), IN data JSON)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE rowCount INT;
DECLARE columns VARCHAR(255);
DECLARE values VARCHAR(255);
DECLARE sqlQuery VARCHAR(1000);
SET rowCount = JSON_LENGTH(data);
SET columns = JSON_UNQUOTE(JSON_EXTRACT(data, CONCAT('$[', i, '].columns')));
SET values = JSON_UNQUOTE(JSON_EXTRACT(data, CONCAT('$[', i, '].values')));
SET sqlQuery = CONCAT('INSERT INTO ', tableName, ' (', columns, ') VALUES (', values, ')');
WHILE i < rowCount DO
PREPARE stmt FROM sqlQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
假设我们有一个表 users
,结构如下:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
我们可以使用以下 JSON 数据调用存储过程:
[
{
"columns": "name, email",
"values": "'Alice', 'alice@example.com'"
},
{
"columns": "name, email",
"values": "'Bob', 'bob@example.com'"
}
]
调用存储过程的 SQL 语句如下:
CALL BatchInsertData('users', '[{"columns": "name, email", "values": "'Alice', 'alice@example.com'"}, {"columns": "name, email", "values": "'Bob', 'bob@example.com'"}]');
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云