MySQL使用循环更新表列利率测试数据时所有行值相同问题求助
问题成因
- UPDATE语句缺少WHERE过滤条件:不带条件的UPDATE会对全表所有行生效,每次循环都会把整张表的mInterest字段覆盖为当前的i值,循环结束后所有行都会保留最后一次循环的i值(即3.0),所以看起来所有行都是相同值。
- 原代码只有更新逻辑没有数据插入逻辑:你创建完mtgPayment表后没有插入任何初始行,UPDATE操作不会生成新数据,最终要么是空表,要么是原有已存在的所有行被统一覆盖为相同利率。
修复方案
如果你的预期是生成3条测试数据,分别对应2.0、2.5、3.0三个利率值,只需要把存储过程里的UPDATE语句改为INSERT语句即可,修改后的完整代码如下:
CREATE TABLE mtgPayment (lengthMonths DECIMAL(4,0), mInterest DECIMAL(8,6), loanAmt DECIMAL(10,2)); DELIMITER $$ CREATE PROCEDURE test_data() BEGIN DECLARE i DECIMAL(8,6) DEFAULT 2.0; WHILE i < 3.5 DO -- 改为插入语句,可按需调整lengthMonths、loanAmt的测试值 INSERT INTO mtgpayment(mInterest, lengthMonths, loanAmt) VALUES (i, 36, 100000); SET i = i + 0.5; END WHILE; END$$ DELIMITER ; CALL test_data(); SELECT * FROM mtgpayment;
如果你已经提前在表中插入了3条初始行,需要给不同行更新不同的利率,只需要在UPDATE语句里加入行匹配的WHERE条件,用主键、行号等字段和每次循环的i值做对应即可。
内容的提问来源于stack exchange,提问作者MTDayton
相关产品推荐
相关产品推荐

