Могу ли я обновить / выбрать из таблицы одним запросом?

Мне нужно выбрать данные при просмотре страницы и обновить столбец «просмотры». Есть ли способ сделать это в одном запросе или мне нужно использовать для отдельных запросов?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
2 913
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вам нужно будет сделать это двумя операторами в одной транзакции.

Begin Tran

Update Pages Set Views = Views + 1 Where ID = @ID
Select Columns From Pages Where ID = @ID

Commit Tran
Ответ принят как подходящий

Если вы не хотите / не нуждаетесь в транзакции, вы можете создать хранимую процедуру, которая сначала обновляет счетчик просмотров, а затем выбирает значения и возвращает их пользователю.

В операторе PostgreSQL ОБНОВИТЬ есть предложение RETURNING, которое возвращает набор результатов как оператор SELECT:

UPDATE mytable
 SET views = 5
 WHERE id = 16
 RETURNING id, views, othercolumn;

Я почти уверен, что это нестандартно. Я не знаю, реализуют ли это какие-либо другие базы данных.

Обновлено: я только что заметил, что в вашем вопросе есть тег «MySQL». Возможно, вам стоит упомянуть об этом в самом вопросе. Тем не менее, это хороший общий вопрос о базе данных - я хотел бы посмотреть, как это сделать в других базах данных.

Было бы полезно, если бы вы указали СУБД, которые вы используете SQL Server имеет инструкцию OUTPUT

Пример

USE AdventureWorks;
GO
DECLARE @MyTestVar table (
    OldScrapReasonID int NOT NULL, 
    NewScrapReasonID int NOT NULL, 
    WorkOrderID int NOT NULL,
    ProductID int NOT NULL,
    ProductName nvarchar(50)NOT NULL);

UPDATE Production.WorkOrder
SET ScrapReasonID = 4
OUTPUT DELETED.ScrapReasonID,
       INSERTED.ScrapReasonID, 
       INSERTED.WorkOrderID,
       INSERTED.ProductID,
       p.Name
    INTO @MyTestVar
FROM Production.WorkOrder AS wo
    INNER JOIN Production.Product AS p 
    ON wo.ProductID = p.ProductID 
    AND wo.ScrapReasonID= 16
    AND p.ProductID = 733;
SELECT OldScrapReasonID, NewScrapReasonID, WorkOrderID, 
    ProductID, ProductName 
FROM @MyTestVar;
GO

Я использовал этот трюк с Java, и SQL Server также позволяет отправлять две команды в одном PreparedStatement.

update tablex set y=z where a=b \r\n select a,b,y,z from tablex

Это должно быть в транзакции с подтверждением чтения, чтобы она работала так, как вы думаете.

Другие вопросы по теме