gpt4 book ai didi

MySQL 存储过程 UPDATE 仅更改第一行

转载 作者:行者123 更新时间:2023-11-29 05:05:21 26 4
gpt4 key购买 nike

我有以下 watching

enter image description here

如果我运行这个简单的测试查询:

UPDATE 
`watching`
SET
`lastPriceSeen` = 1.33
WHERE
`email` = 'blablanfff@gmail.com' AND
`productId` = 254857265
LIMIT 1

行 ID 10 在 lastPriceSeen 列中正确更新为 1.33

如果我将其转换为存储过程:

DELIMITER ;;
CREATE PROCEDURE `updateLastSeenPrice`(
email VARCHAR(100),
productId INT(11),
price FLOAT
)
DETERMINISTIC
COMMENT 'Updates watcher last seen price'
BEGIN
UPDATE
`watching`
SET
`lastPriceSeen` = price
WHERE
`email` = email AND
`productId` = productId
LIMIT 1;
END;;
DELIMITER ;

并运行 CALL updateLastSeenPrice('blablanfff@gmail.com','254857265', 1.11)

当我期望行 ID 10 更新时,只有第一行 (ID 1) 会更新价格。

这对我来说毫无意义,WHERE 子句应该可以防止这种情况发生,而且这是同一个查询!我什至在存储过程的末尾添加了一个 SELECT 来测试它是否正确接收 IN 参数并且它是......

关于为什么更新第一行的任何想法?当 WHERE 子句应该阻止它这样做时,为什么它会匹配它?

最佳答案

WHERE 子句看不出列名和参数名之间的区别。因此,任何记录都可以,它会更新第一个记录。

改成:

CREATE PROCEDURE `updateLastSeenPrice`(
p_email VARCHAR(100),
p_productId INT(11),
p_price FLOAT
)
DETERMINISTIC
COMMENT 'Updates watcher last seen price'
BEGIN
UPDATE
`watching`
SET
`lastPriceSeen` = p_price
WHERE
`email` = p_email AND
`productId` = p_productId
LIMIT 1;
END;;
DELIMITER ;

关于MySQL 存储过程 UPDATE 仅更改第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49385741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com