在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫/ mysql存儲過程使用on duplicate key update無法正常up

mysql存儲過程使用on duplicate key update無法正常update

1、問題如標題所示;
2、情況:
a、創(chuàng)建了存儲過程testPro
BEGIN

insert INTO test (uid,kNum,mNum) VALUES (`uid`,`kNum`,`mNum`)

ON DUPLICATE KEY UPDATE uid=`uid`,kNum=kNum+`kNum`,mNum=mNum+`mNum`;

END
輸入?yún)?shù)為
IN `uid` varchar(10),IN `kNum` int,IN `mNum` int

b、構(gòu)建表:
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`kNum` int(11) DEFAULT NULL,
`mNum` int(11) DEFAULT NULL,
`uid` varchar(10) NOT NULL,
PRIMARY KEY (`id`,`uid`),
UNIQUE KEY `ske` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

c、執(zhí)行調(diào)用:
call testPro('2017-11-24',0,1);
第一次調(diào)用結(jié)果:

clipboard.png

第二次調(diào)用結(jié)果:

clipboard.png

第三次調(diào)用時,就不會再累加了,結(jié)果如第二次調(diào)用一樣;

但如果,我們此時累加kNum一次:
call testPro('2017-11-24',1,0);
結(jié)果會變成這樣:

clipboard.png

而且同樣不能再繼續(xù)累加;

請各位看看這到底是什么問題。網(wǎng)上能找的我應該都找了,實在沒能找到解釋。最接近的也就這篇文章,但是試過沒有效果:https://yq.aliyun.com/ziliao/...;

回答
編輯回答
孤毒

存儲過程的變量名不要和字段名一致,你換成a,b,c再試試

2017年4月21日 23:12
編輯回答
歆久

我直接復制你的表結(jié)構(gòu),sql語句,執(zhí)行沒有問題,會多次累加。但是,你的sql有點問題,每次是按照數(shù)據(jù)庫原有的值累加:kNum=kNum+kNum,mNum=mNum+mNum,并不是數(shù)據(jù)庫里的值 加上新的值。
正確的sql是:
INSERT INTO test (uid,kNum,mNum) VALUES ('2012', 0, 1) ON DUPLICATE KEY UPDATE uid=uid,kNum=VALUES(kNum)+kNum,mNum=VALUES(mNum)+mNum;

即:kNum=VALUES(kNum)+kNum

2018年5月30日 18:20