如何在 MySQL 的同一语句中声明变量?

Posted

技术标签:

【中文标题】如何在 MySQL 的同一语句中声明变量?【英文标题】:How to declare a variable within the same statement in MySQL? 【发布时间】:2020-06-21 12:02:02 【问题描述】:

如何在 mysql 中创建可以在同一语句中引用的变量?

这是否也适用于 UPDATE 和 INSERT 语句?

我问这个是因为我有很多 SQL 文本文件,我在其中使用 MySQL-Workbench 中的 Ctrl-Enter 执行单个命令。如果是多个语句,我必须在按 Ctrl-Enter 之前选择要执行的命令。这更复杂,更容易出错。

在有人问之前:这是一个只有一个用户的私有数据库,我使用这些脚本直接修改数据,而通过 GUI 进行编辑需要很长时间。

我刚刚决定应该用 java 程序包装更复杂的代码。这是一个很好的决定。对于我不想编写java代码的不太复杂的问题,我仍然需要解决这个问题。

【问题讨论】:

【参考方案1】:

好吧,我无法在网上找到解决方案。但结果却是……相当简单。 只需创建一个包含您的语句的语句:

select *, @variable:='Value' from (
    select * from your_table inner where @variable=inner.column
) as outer

【讨论】:

【参考方案2】:

不清楚为什么需要在同一个语句中执行此操作。运行两条语句很容易,它使代码更容易编写和理解。您应该始终考虑成功处理您的代码的开发人员将如何理解和维护它。

SET @variable = 'Value';

SELECT ... FROM your_table WHERE a_column = @variable;

如果您确实需要在一个语句中这样做,我会这样做:

SELECT ... FROM your_table 
CROSS JOIN (SELECT @variable := 'Value') AS _init
WHERE a_column = @variable;

通过在派生表中执行此操作,它只执行一次赋值。如果您在解决方案中显示的选择列表中执行此操作,则分配的次数与内部查询返回的行数一样多。如果赋值是针对一个常量值,这没什么大不了的,但是如果你的变量被赋值为一个代价高昂的表达式的结果,它会很慢。

【讨论】:

好吧,我有一个包含多个语句的文本文件。我通过按 Ctrl-Enter 手动执行此文件中的单个语句。如果是多个语句,我将不得不选择首先执行的文本。 -- 不过会尝试你的解决方案。 @JPT 您的问题中都没有出现。 你们俩都是对的。我用 Java 包装了 SQL,现在我有了一些简单的 SQL 语句,并且可以完全控制发生的事情;)

以上是关于如何在 MySQL 的同一语句中声明变量?的主要内容,如果未能解决你的问题,请参考以下文章

在SQL存储过程中,如何声明变量,赋值变量。最好有具体语句配上实例。3Q啦。谢谢各位大侠的帮忙

MySQL存储过程变量定义

如何声明变量并在同一个 Oracle SQL 脚本中使用它?

如何在 MySQL 中声明一个变量?

如何在将成为全局的 if/switch 语句中声明一个变量?

已声明且未使用 - 如何更新 IF 语句中的变量