INSERT [LOW_PRIORITY] [IGNORE] [INTO] tbl_name [(column list)] SELECT ...
Команда INSERT ... SELECT
обеспечивает возможность быстрого внесения
большого количества строк в таблицу из одной или более таблиц.
INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE tblTemp1.fldOrder_ID > 100;
Для команды INSERT ... SELECT
необходимо соблюдение следующих условий:
Целевая таблица команды
INSERT
не должна появляться в утвержденииFROM
частиSELECT
данного запроса, поскольку в ANSI SQL запрещено производить выборку из той же таблицы, в которую производится вставка. (Проблема заключается в том, что операцияSELECT
, возможно, найдет записи, которые были внесены ранее в течение того же самого прогона команды. При использовании команд, внутри которых содержатся многоступенчатые выборки, можно легко попасть в очень запутанную ситуацию!)Столбцы
AUTO_INCREMENT
работают, как обычно.Для получения информации о данном запросе можно использовать функцию C API
mysql_info()
. See Раздел 6.4.3, «Синтаксис оператораINSERT
».Чтобы гарантировать возможность использования журнала обновлений/двоичного журнала для восстановления исходного состояния таблиц, в MySQL во время выполнения команды
INSERT ... SELECT
параллельные вставки не разрешаются.
Разумеется, для перезаписи старых строк можно вместо INSERT
использовать
REPLACE
.