2013-04-08 5 views
2

Я новичок в разработке php, и я хочу создать веб-приложение php-mysql. В этом приложении у меня есть случай, когда возможно, что в то же время у меня может быть один оператор «UPDATE» и один запрос «SELECT» для той же строки. И вот здесь появляется мой вопрос. Может ли mysql автоматически блокировать строку при обновлении, поэтому запросы на выбор будут ждать?php mysql - действительно ли mysql автоматически блокирует строки при обновлении?

Если да, будут ли выбранные запросы ждать, пока запрос обновления будет готов (транзакция закончена), а затем выполнена? Или они потерпят неудачу, и мне придётся управлять в приложении, чтобы повторно их выпустить?

Любые предложения о том, как действовать в этом случае?

+0

Я не уверен на 100% о блокировке строк, потому что я не эксперт по SQL. Но если вы запустите PHP-скрипт с запросом UPDATE, за которым следует запрос SELECT, сценарий не будет продолжаться до тех пор, пока не будет обработан запрос UPDATE (поэтому SELECT всегда будет получать актуальную информацию). – Sam

ответ

6

Да, строка будет заблокирована до тех пор, пока команда обновления не будет завершена. Выбор будет выполнен только после успешного выполнения команды обновления.

Надеюсь, вы, возможно, слышали об свойствах ACID.
вот они:

Атомарность
Все изменения данных выполняются так, как будто они являются одной операцией. То есть все изменения выполняются или ни один из них не выполняется.
Например, в приложении, которое переводит средства из одной учетной записи в другую, свойство atomicity гарантирует, что если дебет успешно выполнен с одной учетной записи, соответствующий кредит будет передан другой учетной записи.

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

Изоляция
Промежуточное состояние транзакции является невидимым для других операций. В результате транзакции, которые запускаются параллельно, кажутся сериализованными.
Например, в приложении, которое переводит средства с одной учетной записи на другую, свойство изоляции гарантирует, что другая транзакция увидит переведенные средства на одной учетной записи или другой, но не в том и в другом, ни в другом.

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

Все эти свойства применяются в случае транзакции sql.

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