首页 > 解决方案 > 如何在 MySQL 的同一语句中声明变量?

问题描述

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

这也适用于 UPDATE 和 INSERT 语句吗?

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

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

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

标签: mysqlmysql-variables

解决方案


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

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;

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


推荐阅读