Как использовать update вместе с select ... для обновления в mysql - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть две таблицы MySql tableA и tableB, первичный ключ "id" в tableA используется как внешний ключ "parent_id" в tableB.Я хотел бы обновить одну строку в таблице B, используя select ... для обновления, чтобы другие пользователи не могли получить к ней доступ, пока транзакция не завершена.У меня вопрос - как правильно обновить выбранную строку в одном запросе?Вот мой пример кода:

START TRANSACTION;
SELECT b.reserved, b.owner FROM tableB b, tableA a 
WHERE b.parent_id = a.id AND a.guid ='5344a990-fedf-4deb-a114-0d5d6a3ba180' FOR UPDATE;
UPDATE tableB SET...;
COMMIT;

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

Да, это возможно.Пожалуйста, посмотрите на:

Вот пример того, как может выглядеть ваш запрос:

START TRANSACTION;
# Lock table using `FOR UPDATE`
SELECT 
  b.reserved, 
  b.owner 
FROM 
  tableB b,
  tableA a 
WHERE 
  b.parent_id = a.id 
  AND a.guid ='5344a990-fedf-4deb-a114-0d5d6a3ba180' 
FOR UPDATE;

# Update query
UPDATE 
  tableA 
SET 
  tableA.column1=(
    SELECT 
      b.reserved 
    FROM 
      tableB b, 
      LEFT JOIN tableA a ON a.id=b.id 
    WHERE 
      b.parent_id = a.id 
      AND a.guid ='5344a990-fedf-4deb-a114-0d5d6a3ba180'
  ) 
WHERE ... 
LIMIT 1;  

COMMIT;

Надеюсь, это поможет,

...