Как выбрать и обновить запись одновременно в mySQL?
Есть ли способ выбрать запись и обновить ее в одном запросе?
Я попробовал это:
UPDATE arrc_Voucher
SET ActivatedDT = now()
WHERE (SELECT VoucherNbr, VoucherID
FROM arrc_Voucher
WHERE ActivatedDT IS NULL
AND BalanceInit IS NULL
AND TypeFlag = 'V'
LIMIT 1 )
я надеялся, что запустит запрос на выборку и получит первую запись, которая соответствует предложению where, обновит поле ActivatedDT в этой записи, но я получил следующую ошибку:
1241 - операнд должен содержать 1 столбец (столбцы)
Есть идеи?
2 ответа
Как насчет:
UPDATE arrc_Voucher
SET ActivatedDT = NOW()
WHERE ActivatedDT IS NULL
AND BalanceInit IS NULL
AND TypeFlag = 'V'
LIMIT 1;
UPDATE возвращает количество строк, которые были фактически изменены
Вы не можете выбрать строку и обновить ее одновременно, вам потребуется выполнить два запроса для ее достижения; получить вашу запись, а затем обновить ее.
Если вы беспокоитесь о параллельных процессах, обращающихся к одной и той же строке через какое-либо условие гонки (предположим, что ваш сценарий использования связан с большим трафиком), вы можете рассмотреть другие альтернативы, такие как блокировка таблицы (обратите внимание, что другим процессам потребуется восстановление - повторите попытку). -если таблица заблокирована при доступе к ней)
Или, если вы можете создать хранимую процедуру, вы можете прочитать эту статью или документацию по MySQL API.
Но в 99% случаев это не обязательно, и два запроса будут выполняться без проблем.