Что блокировка на уровне таблицы блокирует во время вставки в MySQL? - PullRequest
2 голосов
/ 18 января 2009

Я много раз читал, что MySQL будет выполнять блокировки на уровне таблицы для таблиц MyISAM во время вставок. Со мной все в порядке, если эта блокировка предназначена только для сериализации команд вставки / удаления. Вставки на моем сайте очень редки.

Но будет ли эта блокировка блокировать все запросы Select, пока команда вставки не завершится?

Ответы [ 2 ]

3 голосов
/ 21 января 2009

Блокировка записи блокирует все выборки, которые используют заблокированные вами таблицы.

0 голосов
/ 18 января 2009

Для достижения уровней изоляции на сервере MySQL вы можете изменить режим изоляции сеанса с помощью команды SET SESSION.

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

Вышеприведенный оператор будет работать как WITH (nolock), т.е. ЧИТАТЬ НЕКОММИТИРОВАННЫЕ данные. Вы также можете установить уровень изоляции глобально для всех соединений.

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

Существуют две системные переменные, связанные с уровнем изоляции на сервере MySQL.

SELECT @@global.tx_isolation;
SELECT @@tx_isolation;

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

В SQL Server вы также можете установить уровень изоляции на уровне транзакции следующим образом.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

читать дальше @: mysql с nolock

...