mysql - 如何在 MySQL 的同一语句中声明变量?
问题描述
如何在 MySQL 中创建可以在同一语句中引用的变量?
这也适用于 UPDATE 和 INSERT 语句吗?
我问这个是因为我有很多 SQL 文本文件,我在其中使用 MySQL-Workbench 中的 Ctrl-Enter 执行单个命令。如果是多个语句,我必须在按 Ctrl-Enter 之前选择要执行的命令。这更复杂且容易出错。
在有人问之前:这是一个具有单个用户的私有数据库,我使用这些脚本直接修改数据,通过 GUI 进行编辑需要很长时间。
我刚刚决定应该用 java 程序包装更复杂的代码。这是一个很好的决定。对于我不想编写java代码的不太复杂的问题,我仍然需要解决这个问题。
解决方案
目前尚不清楚为什么需要在同一个语句中执行此操作。运行两条语句很容易,它使代码更容易编写和理解。您应该始终考虑成功处理您的代码的开发人员将如何理解和维护它。
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;
通过在派生表中执行此操作,它只执行一次分配。如果您像在解决方案中显示的那样在选择列表中执行此操作,则分配的次数与内部查询返回的行数一样多。如果赋值是针对一个常量值,这没什么大不了的,但是如果你的变量被赋值为一个代价高昂的表达式的结果,它会很慢。
推荐阅读
- settings - 多行编辑不起作用(jupyter 实验室)?
- linux-kernel - RPi4:设备驱动程序 - 微秒延迟/计数
- javascript - 如何在循环的每次迭代中执行promise.then?Javascript
- ios - 根据在多选集合视图上选择的集合视图单元格显示不同的表视图数据
- c# - 如何序列化 Dynamics CRM 元数据
- java - 在 JUnit 或 TestNG 中的两个测试类之间共享一个对象
- azure - 从 Azure Active Directory 创建的租户是否完全独立?
- grep - 具有至少一个匹配值和至少一个不匹配的 Grep
- iframe - Headless Moodle:Iframe 身份验证
- python - 从python中的字典列表中获取最大值字典