首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL :当存储过程参数名称与表列名相同时[继续]

问MySQL :当存储过程参数名称与表列名相同时[继续]
EN

Stack Overflow用户
提问于 2009-05-15 09:18:56
回答 1查看 3K关注 0票数 2

假设有一个存储过程SetCustomerName,它有一个输入参数名,而我有一个具有列名的表客户。因此,在我的存储过程中,我想设置客户的名称。如果我写

代码语言:javascript
复制
UPDATE customers SET Name = Name;

这是不正确的,我必须写(例如)

代码语言:javascript
复制
UPDATE customers SET `Name` = Name;

因此,有一个关于backticks (http://dev.mysql.com/doc/refman/5.0/en/identifiers.html)的链接,但是它没有深入解释如何使用它们(如何使用参数和列名)。

还有一件很奇怪的事(至少对我来说是这样):你可以用后排做任何一种方式:

代码语言:javascript
复制
UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;

他们的工作方式完全一样。

你不觉得这很奇怪吗?这种奇怪的行为在什么地方解释过了吗?

EN

回答 1

Stack Overflow用户

发布于 2009-06-03 00:21:21

我不明白为什么你一开始就需要用背板来逃避。在语句更新x集a= b中,a必须始终引用X.b的列,但是,b可以是变量,也可以是列。给定本地范围和变量解析在存储过程中工作。的方式,b将始终引用局部变量,即使在x中存在同名列。

因此,我无法重现你的问题。我试过这样做:

代码语言:javascript
复制
mysql> SELECT * FROM comments;
+----+-----------+---------+
| id | parent_id | content |
+----+-----------+---------+
|  1 |         0 | bar     | 
|  2 |         0 | baz     | 
+----+-----------+---------+
2 rows in set (0.00 sec)
mysql> delimiter //
mysql> CREATE PROCEDURE foo(IN content TEXT)
    -> BEGIN
    ->   UPDATE comments SET content = content;
    -> END //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> CALL foo('changed!');
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM comments;
+----+-----------+----------+
| id | parent_id | content  |
+----+-----------+----------+
|  1 |         0 | changed! | 
|  2 |         0 | changed! | 
+----+-----------+----------+
2 rows in set (0.00 sec)

如您所见,注释表的列内容将被更新,即使内容也是存储过程foo的参数的名称。

您确定UPDATE customers设置了Name = Name;给出了错误吗?有了上述解释,看来合乎逻辑的是

代码语言:javascript
复制
UPDATE customers SET Name = `Name`;
UPDATE customers SET `Name` = Name;
UPDATE customers SET `Name` = `Name`;

所有这些都有相同的效果。

编辑:当然,对于SELECT语句,的情况会有所不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/867709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档