[Mysql] Insert into SELECT в несколько таблиц с пользовательскими переменными?

Тема в разделе "Базы данных", создана пользователем RedRabbit, 28 ноя 2015.

Модераторы: latteo
  1. RedRabbit

    RedRabbit

    Регистр.:
    11 июл 2008
    Сообщения:
    606
    Симпатии:
    250
    Здравствуйте, как реализовать:
    Вставку из одной таблицы я сделал
    Код:
    INSERT INTO `BD2`.`table2`
    SELECT
    @id:= NULL,
    --.......перечисляю все столбцы в перемененные
    
    FROM `BD1`.`table1`
    WHERE
    ...
    ORDER BY
        ...... DESC
    LIMIT 1000;

    1. Почему так не работает?
    Код:
    INSERT INTO `BD2`.`table2` (@id, @next1,@next2............)
    SELECT
    @id:= NULL,
    --.......перечисляю все столбцы в перемененные
    
    FROM `BD1`.`table1`
    WHERE
    ...
    ORDER BY
        ...... DESC
    LIMIT 1000;
    2. Но как сделать две вставки в пределах одного запроса при одном SELECT????

    Код:
    INSERT INTO `BD2`.`table2` (@id, @next1,@next2............)
    INSERT INTO `BD3`.`table3` (@next3,@next5............)
    SELECT
    @id:= NULL,
    --.......перечисляю все столбцы в пременные
    FROM `BD1`.`table1`
    WHERE
    ...
    ORDER BY
        ...... DESC
    LIMIT 1000;
     
  2. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    1. Необходимо чтобы количество полей и тип данных совпадал table1 и table2.
    2. Mysql не поддерживает двойную вставку insert за один запрос.
    3. Чтобы объединять потоки запросов уже давно используются транзакции
    Код:
    BEGIN
    START TRANSACTION;
    SELECT
    @id:= NULL,
    --.......перечисляю все столбцы в пременные
    FROM `BD1`.`table1`
    WHERE
    ...;
    ORDER BY
    ...... DESC
    LIMIT 1000;
    INSERT INTO `BD2`.`table2` (@id, @next1,@next2............);
    INSERT INTO `BD3`.`table3` (@next3,@next5............);
    COMMIT;
        ELSE
            ROLLBACK;
        END IF;
    END
    
    4. У таблицы Engine=InnoDB
     
    XaHDpE и RedRabbit нравится это.