2013-02-08 5 views
9

У меня есть небольшое любопытство в отношении блокировок таблиц MySQL.MySQL Множественные блокировки таблиц

Скажем, я хочу заблокировать две таблицы. Я выполнить эту команду:

LOCK TABLES table1 WRITE, table2 WRITE 

А потом я проверил, если таблицы действительно были заблокированы командой:

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

Я заметил Тхо, что если я бегу два замка команды sequentitally, например:

LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

И затем проверьте, какие таблицы заблокированы с использованием одной и той же команды, только таблица2 отмечена как заблокированная. Почему это так?

Благодаря

ответ

7

LOCK TABLES не поддерживают транзакции и неявно совершает любую активную транзакцию перед попыткой блокировать таблицы.

Таким образом, в первом случае, у вас есть одна сделка, которая держать 2 таблицы заблокирован, во втором только один, потому что LOCK TABLES table1 WRITE были поручены

0

таблицы блокировки сначала разблокировать все таблицы, заблокированные текущей сессии перед выполнением указанный замок. Таким образом, вызов блокировки таблицы 2 является разблокировкой таблицы 1.

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