2009-04-28 9 views
0

Выполняет ли транзакция в хранимой процедуре любую блокировку, чтобы другие пользователи не обновляли таблицы?Операция mysql в хранимой процедуре (блокировка/откат)

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

ответ

0

Выполняет ли транзакция в хранимой процедуре блокировку, чтобы другие пользователи не обновляли таблицы?

При выполнении некоторых DML на InnoDB таблицы, строки, затронутые не блокируются до завершения транзакции (не имеет значения, что внутри хранимой процедуры или нет).

Вы можете изменить заблокированные строки внутри той же транзакции, которая заблокировала его.

Чтобы явно заблокировать некоторые строки, вопрос:

SELECT * 
FROM table 
WHERE condition 
FOR UPDATE 

для совершали или откат транзакции Кроме этого, нет другого пути, чтобы разблокировать строки

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

Вам необходимо выполнить откат явно.

+0

Я предполагаю, что я спрашиваю, будут ли строки оставаться заблокированными на время транзакции. это означает, что если у меня будет несколько обновлений, блокировка будет выпущена после каждого обновления или только после того, как все обновления будут завершены, потому что они находятся в транзакции. – richs

+0

Блокировка сохранится до конца транзакции, вот и вся точка блокировки :) – Quassnoi

Смежные вопросы