когда выберет оператор без обновления, вызывающего блокировку? - PullRequest
0 голосов
/ 29 мая 2009

Я использую MySQL,

Иногда я видел оператор выбора, статус которого «заблокирован» при запуске «show processlist»

но после тестирования на локальном компьютере я больше не могу воспроизвести статус «заблокирован».

Ответы [ 3 ]

1 голос
/ 29 мая 2009

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

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

1 голос
/ 29 мая 2009

Вероятно, это зависит от того, что еще происходит. Я не эксперт по MySQL, но в SQL Server различные уровни блокировки контролируют, когда данные могут быть прочитаны и записаны. Например, в производственном процессе выбранный вами stateemnt может захотеть прочитать обновляемую запись. Он должен ждать, пока обновление не будет сделано. И наоборот - обновлению может потребоваться дождаться окончания чтения.

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

0 голосов
/ 29 мая 2009

Я тоже не эксперт по MySQL, но поведение блокировки сильно зависит от уровня изоляции / изоляции транзакции. Я бы предложил поискать эти термины в документации по MySQL.

...