- 目标 将a表中类似于
1,2,3的字符串, 依据逗号分割成多条, 存入到b表中
源表

目标表

创建及调用存储过程
DELIMITER $$
CREATE PROCEDURE SplitAndInsertLessons()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE studentID INT;
DECLARE lessonString VARCHAR(255);
DECLARE lessonValue VARCHAR(10);
DECLARE cur CURSOR FOR SELECT id, lessons FROM student;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO studentID, lessonString;
IF done THEN
LEAVE read_loop;
END IF;
WHILE CHAR_LENGTH(TRIM(lessonString)) > 0 DO
SET lessonValue = SUBSTRING_INDEX(lessonString, ',', 1);
INSERT IGNORE INTO student_lesson (student_id, lesson_id) VALUES (studentID, CAST(lessonValue AS SIGNED));
SET lessonString = INSERT(lessonString, 1, CHAR_LENGTH(lessonValue) + IF(lessonString REGEXP CONCAT('^', lessonValue, ','), 1, 0), '');
END WHILE;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
CALL SplitAndInsertLessons();