MySQL Workbench 8.0编写循环加载数据存储过程报错如何解决
报错原因
代码存在3个核心问题,直接导致执行失败:
- 字符串拼接逻辑错误:MySQL不支持使用
+拼接字符串,+仅作为数值运算符使用。原代码中'Car-'+CAST(counter as varchar)会被解析为数值加法,字符串'Car-'转数值结果为0,最终无法得到预期的Car-数字格式字符串。 - INSERT语句列数不匹配:
Cars表共包含Id、Name、Price3个字段,但原INSERT语句仅传入2个值,即使Id是自增主键,未显式指定插入字段列表时会触发列计数不匹配报错。 - 事务逻辑不完整:代码中开启了事务但未编写
COMMIT语句,即使插入逻辑执行成功,数据也不会持久化到表中。另外WHILE循环内多余包裹的BEGIN...END块属于无意义语法冗余,不会直接报错但没有存在必要。
修正后可直接运行的代码
DROP TABLE IF EXISTS Cars; CREATE TABLE Cars ( Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Name CHAR (50) NOT NULL, Price INT ); DROP PROCEDURE IF EXISTS load_car; DELIMITER $$ CREATE PROCEDURE load_car() BEGIN DECLARE counter INT DEFAULT 1; START TRANSACTION; WHILE counter <= 10 DO INSERT INTO Cars (Name, Price) VALUES (CONCAT('Car-', counter), counter*100); SET counter = counter + 1; END WHILE; COMMIT; END $$ DELIMITER ; -- 执行存储过程 CALL load_car();
效果验证
存储过程执行完成后,运行SELECT * FROM Cars;即可查询到10条正确插入的记录:Id自增从1到10,Name字段为Car-1到Car-10,Price字段对应为100到1000。
内容的提问来源于stack exchange,提问作者Halima Asrar
相关产品推荐
相关产品推荐

