Mysql 使用存储过程,多表多条数据插入,异常回滚

插入多条数据,使用字符串在后台拼接的方式,传入存储过程,再到存储过程里面分割字符串,这样就取得了每个元素
添加事务,异常回滚

CREATE DEFINER=`root`@`localhost` PROCEDURE `creat_student_group`(IN `group_name` varchar(128),IN `student_id_card` varchar(900))
BEGIN
    #Routine body goes here...
DECLARE group_id_now  INT DEFAULT 0;
DECLARE i INT DEFAULT 0;


 DECLARE result_code INTEGER DEFAULT 0; -- 定义返回结果并赋初值0
 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET result_code=1; -- 在执行过程中出任何异常设置result_code为1
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET result_code = 2; -- 如果表中没有下一条数据则置为2

START TRANSACTION; -- 开始事务

INSERT INTO group_info (group_name) VALUES(group_name);

SET group_id_now = @@IDENTITY ;

SET @arraylength=1+(LENGTH(student_id_card) - LENGTH(REPLACE(student_id_card,',','')));

WHILE i<@arraylength 
DO
    SET i=i+1;
    SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(student_id_card,',',i)),',',1));
    INSERT INTO group_list(student_info_id,group_info_id) VALUES(@result,group_id_now);
END WHILE;

IF result_code = 1 THEN -- 可以根据不同的业务逻辑错误返回不同的result_code,这里只定义了1和0
ROLLBACK; 
ELSE 
 COMMIT; 
END IF;

select result_code;

END
see you again
原文地址:https://www.cnblogs.com/zfdzzz/p/14612049.html