mysql - 存储过程更新两行

标签 mysql database stored-procedures mariadb

DELIMITER //
 CREATE OR REPLACE PROCEDURE GET_USER_PNTS(USER_ID INT , PNTS INT, QNT INT)
   BEGIN
   DECLARE x  INT DEFAULT 1;
   DECLARE TEMP_GIFT_ID INT;
   UPDATE USR_PNT_SUMM SET USD_PNTS = USD_PNTS + PNTS WHERE USER_ID = 1;
   COMMIT;
   END //
 DELIMITER ;

上面的存储过程更新了两行 - 一行用于 user_id = 1,另一行用于 userid 0。我不明白为什么!

这就是我调用存储过程的方式 - 调用 GET_USER_PNTS(1, 1, 1)

请告诉我为什么 user_id 0 也得到更新。

附言 1. 我正在使用 MariaDB。 2. UserID 0 是我在表中手动添加的。实际上不会有任何 0 user_id。但即便如此,该行也不应该更新。

最佳答案

请重命名您的参数:

CREATE OR REPLACE PROCEDURE GET_USER_PNTS(L_USER_ID INT , L_PNTS INT, L_QNT INT)
   BEGIN
   DECLARE x  INT DEFAULT 1;
   DECLARE TEMP_GIFT_ID INT;
   UPDATE USR_PNT_SUMM SET USD_PNTS = USD_PNTS + L_PNTS WHERE USER_ID = L_USER_ID;
   COMMIT;
   END //

可能 USER_ID = USER_ID 被视为 true。

关于mysql - 存储过程更新两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907093/

相关文章:

oracle - 每次 EXECUTE IMMEDIATE 后都需要 COMMIT 吗?

php - 使用 phinx 迁移库在非主键列上自动递增

php - 所选数据库中的表和所选表中的字段

Sqlite 更新字段,如果它包含

mysql - 将日期时间值转换为字符串

oracle - 对未初始化集合 PL/SQL 的引用

mysql - mysql中的ERROR 1064,任何人都可以检查错误是什么?

mysql - 仅从数据库中更改一列即可获取同一行的多行

MySQL "remembers"删除InnoDB表

database - 时间戳如何导致 "global deadlock"?