Выполняет ли транзакция в хранимой процедуре блокировку, чтобы другие пользователи не обновляли таблицы?
При выполнении некоторых DML
на InnoDB
таблицы, строки, затронутые не блокируются до завершения транзакции (не имеет значения, что внутри хранимой процедуры или нет).
Вы можете изменить заблокированные строки внутри той же транзакции, которая заблокировала его.
Чтобы явно заблокировать некоторые строки, вопрос:
SELECT *
FROM table
WHERE condition
FOR UPDATE
для совершали или откат транзакции Кроме этого, нет другого пути, чтобы разблокировать строки
мне нужно явно положить в Do или будет автоматически откат транзакции, если возникнет ошибка, так как она никогда не достигает команды фиксации.
Вам необходимо выполнить откат явно.
Я предполагаю, что я спрашиваю, будут ли строки оставаться заблокированными на время транзакции. это означает, что если у меня будет несколько обновлений, блокировка будет выпущена после каждого обновления или только после того, как все обновления будут завершены, потому что они находятся в транзакции. – richs
Блокировка сохранится до конца транзакции, вот и вся точка блокировки :) – Quassnoi