MySQL存储过程和标识符

时间:2016-01-19 04:01:08

标签: mysql sql stored-procedures prepared-statement

我正在学习编写MySQL存储过程,但我遇到了一些困难。这里我有两个存储过程:

第一个存储过程:

CREATE PROCEDURE sp1 (IN `username` TEXT, OUT `user_id` INT)
BEGIN
    DECLARE rowcount INT;

    SELECT count(`User ID`) INTO rowcount FROM user WHERE `Username`=username;

    SET user_id = rowcount;
END|

第二个存储过程:

CREATE PROCEDURE sp2 (IN `doc_id` INT, IN `content` LONGTEXT)
BEGIN
    UPDATE doc SET `Content`=content WHERE `Doc ID`=doc_id;
END|

(分隔符为|。)

问题:

我观察到第一个存储过程的结果与调用SELECT count(`User ID`) FROM user;相同。但是,第二个存储过程完成其工作并使用新内容更新内容。

那么为什么第一个存储过程会将`Username`username视为相等的标识符,但第二个存储过程会将`Content`content视为不同的标识符?除了第一个字母的大小写外,两种情况下的两个标识符都是相同的。

1 个答案:

答案 0 :(得分:0)

我在阅读有关the scope of local variables的官方MySQL文档后想出来。

它声明:

  

局部变量的名称不应与表列相同。如果SQL语句(例如SELECT ... INTO语句)包含对列的引用和声明的具有相同名称的局部变量,则MySQL当前将该引用解释为变量的名称