MySQL.RU .:. Одобрено лучшими российскими программистами
Справочное руководство по MySQL6.4.3.1 Синтаксис оператора INSERT ... SELECT
6.4.3.1 Синтаксис оператора INSERT ... SELECT
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 section 6.4.3 Синтаксис оператора INSERT .
-
Чтобы гарантировать возможность использования журнала
обновлений/двоичного журнала для восстановления исходного состояния
таблиц, в MySQL во время выполнения команды
INSERT ... SELECT
параллельные вставки не разрешаются.
Разумеется, для перезаписи старых строк можно вместо INSERT использовать
REPLACE .
|