nig*_*der 9 mysql parameters stored-procedures
假设有一个存储过程SetCustomerName,它有一个输入参数Name,我有一个表名为customer的表客户.所以在我的存储过程中,我想设置客户的名字.如果我写
UPDATE customers SET Name = Name;Run Code Online (Sandbox Code Playgroud)
这是不正确的,我还看到了另外两种方式:
UPDATE customers SET Name = `Name`;
UPDATE customers SET customers.Name = Name;Run Code Online (Sandbox Code Playgroud)
第一个工作,但我没有在文档中找到我可以在`字符内包装参数.或者我在文档中错过了它(在这种情况下链接是受欢迎的).
还有哪些其他方式以及这种情况的标准方式是什么?重命名输入参数对我不好(因为如果你知道我的意思,我有自动对象关系映射).
更新:
所以,有一个关于反引号的链接(http://dev.mysql.com/doc/refman/5.0/en/identifiers.html)但是没有深入解释如何使用它们(如何使用它们与参数和列名).
并且有一个非常奇怪的事情(至少对我来说):你可以使用反引号:
UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;Run Code Online (Sandbox Code Playgroud)
他们都以同样的方式工作.
你觉得这不奇怪吗?这个奇怪的行为是在某处解释的吗?
小智 17
区分参数和列的最简单方法(如果两个名称相同)是在列名中添加表名.
UPDATE customers SET customers.Name = Name;
Run Code Online (Sandbox Code Playgroud)
即使你也可以添加数据库前缀
UPDATE yourdb.customers SET yourdb.customers.Name = Name;
Run Code Online (Sandbox Code Playgroud)
通过添加数据库名称,您可以从单个存储过程对多个数据库执行操作.
我认为你的第一个例子实际上是倒退.如果您尝试将"名称"列设置为"名称"输入参数,我相信它应该是:
UPDATE customers SET `Name` = Name;
Run Code Online (Sandbox Code Playgroud)
对于第二个示例,您可以像在所有其他语句中一样设置表别名:
UPDATE customers AS c SET c.Name = Name;
Run Code Online (Sandbox Code Playgroud)
Cod*_*lan -1
在 MySQL 查询语法中使用反引号记录如下:
http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
所以是的,你的第一个例子(使用反引号)是正确的。
| 归档时间: |
|
| 查看次数: |
9435 次 |
| 最近记录: |