MySQL транзакции вопрос

0

Я читал о транзакциях в MySQL, но я не мог понять одну проблему. Транзакции - это способ обеспечить, чтобы в блоке операторов выполнялись либо все, либо ни одно из них. Тем не менее, делает ли транзакция "блокировку" строк, которые являются ее частью? То есть, скажем, у меня есть следующие утверждения (псевдо):

1) START TRANSACTION
2) SELECT row1 FROM table
3) UPDATE table SET row1='new value'
4) COMMIT

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

Спасибо! Joel

Теги:

3 ответа

2
Лучший ответ

Нет, транзакции и изоляция - это две отдельные концепции.

Пять уровней изоляции:

  • None
  • Чтение зафиксировано означает, что грязные чтения запрещены; не повторяющиеся чтения и phantom могут быть прочитаны.
  • Чтение uncommitted означает, что могут возникать грязные чтения, невоспроизводимые чтения и phantom.
  • Повторяемое считывание означает, что предотвращаются грязные чтения и не повторяющиеся чтения; phantom может произойти чтение.
  • Serializable означает, что недопустимые чтения, не повторяемые чтения и phantom чтения предотвращаются.
2

Это зависит. См. синтаксис инструкции MySQL SELECT, в частности FOR UPDATE и LOCK IN SHARE MODE.

"Если вы используете FOR UPDATE с механизмом хранения, в котором используются блокировки страниц или строк, строки, проверенные по запросу, блокируются записью до конца текущей транзакции. Использование LOCK IN SHARE MODE устанавливает общую блокировку, которая допускает другие транзакции для чтения рассмотренных строк, но не для их обновления или удаления".

0

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

HTH

Ещё вопросы

Сообщество Overcoder
Наверх
Меню