Нужно ли "блокировать" таблицу SQL во время обновления? - PullRequest
2 голосов
/ 04 апреля 2009

У меня запущено веб-приложение, и я хочу получить доступ к базе данных sql с другим приложением, чтобы обновить одну из таблиц новыми вычислениями. Заметят ли мои пользователи что-нибудь во время обновлений? Я получу сообщение об ошибке, если они получат доступ одновременно с обновлением, или есть автоматическая блокировка? ТИА

Ответы [ 6 ]

3 голосов
/ 04 апреля 2009

Обычно строки будут заблокированы во время выполнения обновлений, и любой SQL-запрос, который может использовать эти строки, будет "зависать" до завершения обновления, а затем возвращать правильные данные.

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

3 голосов
/ 04 апреля 2009

Если ваша СУБД хороша, она должна позаботиться об этом за вас.

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

1 голос
/ 04 апреля 2009

Если вы используете СУБД с возможностью транзакций, вам не нужно делать блокировки, это будет сделано за вас. Если нет, вам нужно заблокировать строку или таблицу, в зависимости от того, какую вы используете.

Большинство систем СУБД имеют поддержку транзакций, так что об этом не стоит беспокоиться.

1 голос
/ 04 апреля 2009

Это зависит от того, какая у вас СУБД и какой уровень изоляции вы используете. См. Здесь, что говорит документация PostgreSQL. По сути, существует множество различных способов обработки обновлений. С одной стороны, чтения, которые происходят одновременно с обновлениями, могут получить противоречивые данные из частично зафиксированного обновления. На другом конце транзакции полностью синхронизированы. Большинство СУБД имеют тенденцию делать что-то промежуточное из соображений эффективности.

1 голос
/ 04 апреля 2009

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

0 голосов
/ 04 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...