SQL 在单个查询中更新和选择

Posted

技术标签:

【中文标题】SQL 在单个查询中更新和选择【英文标题】:SQL Update And Select In A Single Query 【发布时间】:2012-01-13 11:32:28 【问题描述】:

SQL (mysql) 中有没有一种方法可以增加一个值,并在单个查询中返回该值。我试图避免执行如下两个查询:

查询 1

UPDATE my_table SET my_col = (my_col + 1) WHERE something = something_else;

查询 2

SELECT my_col FROM my_table WHERE something = something_else;

谢谢。

【问题讨论】:

你为什么不想做两个查询? 为什么要这么做?,可以从php端算出来 试图从性能中剔除一切。 你将不得不使用存储过程,检查这个答案:***.com/a/7446154/1588182 MySQL UPDATE and SELECT in one pass的可能重复 【参考方案1】:

据我所知,在 MySQL 中仍然没有这种可能性,但请查看 this question 以了解可能的解决方法,该解决方法至少可以让您以事务方式使用相同的数据进行选择和更新工作。

【讨论】:

【参考方案2】:

无法同时进行选择和更新。 如果你想避免选择,你可以声明一个变量并将值放在那里,但这会将最后更新的行值放在变量中。

declare @value int

UPDATE my_table SET my_col = (my_col + 1), @value = (my_col + 1) WHERE something = something_else;

【讨论】:

但是他们如何返回@value?仍然需要执行选择 @bluefeet 就像我说的那样,这只会避免再次从表中选择数据。他必须选择变量。【参考方案3】:

我不知道您使用的是什么脚本语言,但这里有一个在 MySQL 中创建存储过程的示例,它返回更新的值,以便您可以在一个操作中更新和选择:

Get Updated Value in MySQL instead of affected rows

【讨论】:

以上是关于SQL 在单个查询中更新和选择的主要内容,如果未能解决你的问题,请参考以下文章

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中

单个 SQL 选择查询与单个大 SQLselect 查询:啥更好?为啥? [关闭]

如何在同一个sql查询中更新和选择记录

为啥选择单个属性返回的行数少于选择 Oracle SQL 中的所有列

如何编写基于组合框选择的单个 sql 查询?

使用单个 SQL 查询选择所有带有父评论的回复