2009-12-22 4 views
0

Если у меня есть операции следующим образом:MySql таблица блокировка

В вышеописанной операции будет таблица Foo будет заблокирован, пока все вставки в панель не выполняются? Кроме того, в то время как вставки продолжаются, будет ли блокировка панели таблицы, как и в, никто не сможет читать бар (не беспокоиться о вставках)?

Предположим, что db использует уровень изоляции, REPEATABLE READ и механизм хранения - InnoDB.

+0

Вы проверили, что таблица InnoDB, а не MyISAM? MyISAM не поддерживает транзакцию. – Yada

+0

Извините, забыли упомянуть об этом. Это InnoDB. – Abhi

ответ

0

Нет, операция такого рода не будет блокировать любые таблицы (предположим, что уровень изоляции tx по умолчанию).

Как правило, на замках на уровне стола вообще нет, но есть некоторые типы блокировок, которые могут быть похожими на него.

С уровнем изоляции по умолчанию в innodb, читатели никогда не блокируют писателей и писателей, которые никогда не блокируют читателей. Это по дизайну.

И если вы сделаете INSERT ... SELECT, это будет более эффективно, но, вероятно, не будет отличаться в плане блокировки.

Существует мьютекс InnoDB auto-inc, о котором вы можете прочитать (поиск документов для получения дополнительной информации), но это не блокировка таблицы.

0

В режиме повторной сериализации READATABLE READ выбранные данные из foo будут заблокированы (но вы все равно можете добавить foo или изменить линии, которые не были выбраны). Если вы вставляете только bar, я не думаю, что какие-либо блокировки произойдут с существующими строками в таблице.

Кроме того, есть ли у вас причина не использовать вставку-выбор?

insert into bar (...) select ... from foo; 
Смежные вопросы