2014-11-17 3 views
0

В настоящее время я изучаю функции транзакций и блокировки MySQL.MySQL - Взаимное исключение в транзакции и блокировки?

Операции с уровнем изоляции SERIALIZABLE и утверждения между оператором LOCK и UNLOCK в одной и той же таблице выполнены взаимоисключающими?


EDIT 1: Для сделки вещь с уровнем изоляции SERIALIZABLE, это даже можно определить, является ли сделка фактически взаимоисключающими или только требования, как не фантом чтений выполнены? Или эти два свойства предполагают одно и то же поведение?


EDIT 2: О, и механизмы, которые обеспечивают заданный уровень-изоляции транзакции только активным, если две или более транзакций на самом деле работают на одних и тех же данных, с тем, что явления чтения действительно может произойти?

ответ

0

В InnoDB все SERIALIZABLE делает поворот SELECT в неявный SELECT...LOCK IN SHARE MODE. Таким образом, это влияет только на INSERT/UPDATE/DELETE на одни и те же строки (строки).

Вы можете наблюдать замки в ШОУ ДВИГАТЕЛЬ InnoDB СТАТУС:

---TRANSACTION 14594, ACTIVE 5 sec 
2 lock struct(s), heap size 360, 8 row lock(s) 
MySQL thread id 24, OS thread handle 0x7f65c8624700, query id 324 192.168.56.1 root cleaning up 
TABLE LOCK table `imdb`.`kind_type` trx id 14594 lock mode IS 
RECORD LOCKS space id 24 page no 4 n bits 80 index `kind` of table `imdb`.`kind_type` trx id 14594 lock mode S 

Все, что я сделал SELECT * FROM imdb.kind_type после установки tx_isolation = SERIALIZABLE и autcommit = 0.

Вы видите, что он содержит блокировку таблицы IS, которая блокирует LOCK TABLES kind_type WRITE.

Но если вы выполняете автоматический режим транзакции, это даже не делает этого; он просто действует как REPEATABLE-READ.

+0

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

+0

Все в InnoDB находится в транзакции, независимо от того, начинаете ли вы/фиксируете ее явно или полагаетесь на автосообщение. В обоих случаях они будут подчиняться изоляции транзакций. –