我可以在一个查询中更新/选择表吗?
我需要在查看页面时选择数据并更新“视图”列,有没有一种方法可以在一个查询中执行此操作,或者我是否必须使用不同的查询?
I need to select data when a page is viewed and update the 'views' column is there a way to do this in one query, or do I have to use to distinct queries?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我在 Java 和 SQL Server 中使用了这个技巧,它还允许您在单个PreparedStatement 中发送两个命令。
这需要在读提交事务中才能像您想象的那样工作。
I used this trick with Java and SQL Server will also let you send two commands in a single PreparedStatement.
This will need to be in a read committed transaction to work like you think it should though.
如果您不想/不需要使用事务,则可以创建一个存储过程,该过程首先更新视图计数,然后选择值并将其返回给用户。
If you do not want/need to use a transaction, you could create a stored procedure that first updates the view count and then selects the values and return them to the user.
您必须在一个事务中的两个语句中执行此操作
You would have to do this in two statements in one transaction
如果您列出您正在使用的 RDBMS 将会有所帮助
SQL Server 有 OUTPUT 语句
示例
It would help if you listed the RDBMS you are using
SQL Server has the OUTPUT statement
Example
PostgreSQL 的 UPDATE 语句具有将返回结果的 RETURNING 子句像 SELECT 语句一样设置:
我很确定这不是标准的。 不知道其他数据库有没有实现。
编辑:我刚刚注意到你的问题有“MySQL”标签。 也许你应该在问题本身中提及它。 不过,这是一个很好的通用数据库问题 - 我想看看如何在其他数据库中做到这一点。
PostgreSQL's UPDATE statement has the RETURNING clause that will return a result set like a SELECT statement:
I'm pretty sure this is not standard though. I don't know if any other databases implement it.
Edit: I just noticed that your question has the "MySQL" tag. Maybe you should mention it in the question itself. It's a good generic database question though - I would like to see how to do it in other databases.