поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    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 Раздел 6.4.3, «Синтаксис оператора INSERT».

    • Чтобы гарантировать возможность использования журнала обновлений/двоичного журнала для восстановления исходного состояния таблиц, в MySQL во время выполнения команды INSERT ... SELECT параллельные вставки не разрешаются.

    Разумеется, для перезаписи старых строк можно вместо INSERT использовать REPLACE.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100