【发布时间】:2016-01-19 04:01:08
【问题描述】:
我正在学习编写 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 视为不同的标识符?除了首字母大写外,这两种情况下的两个标识符都是相同的。
【问题讨论】:
-
@RyanVincent 如果我将 IN 参数更改为
doc id,然后将WHERE子句更改为Doc ID=doc id,则每条记录都会更新,就像WHERE子句一样在第一个 SP。我刚刚阅读了有关局部变量范围的官方 MySQL 文档,它只是回答了我的问题。
标签: mysql sql stored-procedures prepared-statement