Rob*_*son 5 mysql sql stored-procedures
我是 MySQL 存储过程的新手,我正在学习如何使用它们的一些教程,但我遇到了以下有趣的事情:
DELIMITER $$
CREATE DEFINER=`user`@`%` PROCEDURE `CalculateScores`(IN ID INT, OUT test INT)
BEGIN
SELECT COUNT(*)
INTO test
FROM myTable
WHERE id = ID;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我用这个运行它:
CALL CalculateScores(252, @test);
Run Code Online (Sandbox Code Playgroud)
然后只是:
SELECT @test;
Run Code Online (Sandbox Code Playgroud)
奇怪的是@test返回整个表的总行数,而不仅仅是id作为参数发送的I 。
我在这里缺少什么?本教程从未提及这一点,我无法找到为什么会发生这种情况的答案,我可能不擅长搜索..
看起来 MySQL 无法区分id和ID:
SELECT COUNT(*)
INTO test
FROM myTable
WHERE id = ID;
Run Code Online (Sandbox Code Playgroud)
并将其视为1=1始终为真(如果列不可为空)。
您可以添加别名来指示它id是列而不是参数。
CREATE PROCEDURE `CalculateScores`(IN ID INT, OUT test INT)
BEGIN
SELECT COUNT(*)
INTO test
FROM myTable t
WHERE t.id = ID;
END
Run Code Online (Sandbox Code Playgroud)