insert into test.qvalues
select * from qcvalues.qvalues;
я хотел бы knwo, если выше линии блокирует базу QCVALUESли это блокирует базу данных?
insert into test.qvalues
select * from qcvalues.qvalues;
я хотел бы knwo, если выше линии блокирует базу QCVALUESли это блокирует базу данных?
Для меня, документация немного непонятно:
Internal Locking Methods предполагает, что, в некоторых случаях, можно вставить таблица MyISAM в то время как другой сеанс чтение из него:
Механизм хранения MyISAM поддерживает параллельные вставки для уменьшения раздора между читателями и писателями для данной таблицы: Если таблица MyISAM не имеет свободных блоков в середине файла данных, строки всегда , вставленные в конец файла данных. В этом случае вы можете свободно смешивать параллельные инструкции INSERT и SELECT для таблицы MyISAM без замков. То есть вы можете вставлять строки в таблицу MyISAM в то же время другие клиенты читают с нее. Отверстия могут возникать из-за того, что строки были удалены или обновлены посередине таблицы. Если имеются отверстия, одновременные вставки отключены, но автоматически включаются, когда все отверстия были заполнены новыми данными .
Однако Table Locking Issues показывает ситуацию, когда таблица будет заблокирована до тех пор, SELECT, пока не завершится (это соответствует вашей ситуации):
Таблица замок также невыгодна под следующий сценарий:
- Сессия выдает SELECT, для выполнения которой требуется много времени.
- Другая сессия затем выдает ОБНОВЛЕНИЕ в той же таблице. Этот сеанс ожидает завершения SELECT.
- Другая сессия вызывает другой оператор SELECT в той же таблице. Поскольку UPDATE имеет более высокий приоритет , чем SELECT, этот SELECT ожидает завершения UPDATE, после ожидания первого SELECT для завершения.
InnoDB таблицы реализации блокировок на уровне строк, поэтому только строка читается будет заблокирован, а не всей таблицы.
Вместо того, чтобы полагаться только на документацию, я попробовал немного теста:
table_a
и table_b
.table_a
с 500 000 строк.table_a
в table_b
используя инструкцию INSERT INTO ... SELECT
.table_a
.table_b
новая запись.Когда обе таблицы, где MyISAM, table_b
не содержали новую запись после копии. Когда обе таблицы, где InnoDB, table_b
, содержали новую запись после копии. Я повторял это три раза, и, как и ожидалось, результат был таким же каждый раз.
Итак, словом, если ваш стол MyISAM, он будет заблокирован. Если это InnoDB, это не так. Конечно, этот тест не рассматривает обновления, но я ожидаю, что результаты будут похожи.
Несомненно, вы имеете в виду _ «он блокирует таблицу qcvalues.qvalues?» _ Блокировка базы данных за пределами действий администратора будет очень редкими ... – Wrikken
отлично, он блокирует таблицу qvalues? –
Какой MySQL-движок использует таблицу? Механизм хранения MyISAM поддерживает параллельные вставки, чтобы уменьшить конфликт между читателями и писателями для данной таблицы. Http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html – Andomar