Оператор многострочной вставки-выбора Mysql с last_insert_id ()

Хорошо. Короче говоря, я пытался выполнить INSERT SELECT, например:

START TRANSACTION;  
INSERT INTO dbNEW.entity (commonName, surname)  
SELECT namefirst, namelast  
FROM dbOLD.user;  
SET @key = LAST_INSERT_ID();  
INSERT INTO dbNEW.user (userID, entityID, other)  
SELECT user_id, @key, other  
FROM dbOLD.user;  
COMMIT;

Конечно, @key не возвращает каждый последующий LAST_INSERT_ID () из каждой вставки, а возвращает идентификатор только из последней вставки.

По сути, я разделяю старую таблицу USER на ENTITY и USER, например:

 dbOLD.user
 +-------------+---------------------+------+-----+------------+----------------+
 | Field       | Type                | Null | Key | Default    | Extra          |
 +-------------+---------------------+------+-----+------------+----------------+
 | user_id     | int(10) unsigned    | NO   | PRI | NULL       | auto_increment |
 | namefirst   | varchar(20)         | NO   |     |            |                |
 | namelast    | varchar(20)         | NO   |     |            |                |
 | other       | varchar(10)         | NO   |     |            |                |
 +-------------+---------------------+------+-----+------------+----------------+


 dbNEW.user
 +-------------+---------------------+------+-----+------------+----------------+
 | Field       | Type                | Null | Key | Default    | Extra          |
 +-------------+---------------------+------+-----+------------+----------------+
 | userID      | int(10) unsigned    | NO   | PRI | NULL       | auto_increment |
 | entityID    | int(10) unsigned    | NO   | MUL | 0          |                |
 | other       | varchar(10)         | NO   |     |            |                |
 +-------------+---------------------+------+-----+------------+----------------+


 dbNEW.entity
 +--------------+---------------------+------+-----+------------+----------------+
 | Field        | Type                | Null | Key | Default    | Extra          |
 +--------------+---------------------+------+-----+------------+----------------+
 | entityID     | int(10) unsigned    | NO   | PRI | NULL       | auto_increment |
 | commonName   | varchar(20)         | NO   |     |            |                |
 | surname      | varchar(20)         | NO   |     |            |                |
 +--------------+---------------------+------+-----+------------+----------------+

Зачем мне это нужно? По сути, у меня есть сущность "STORE", в которой будут поля, общие для "USERS" например адрес и номер телефона. Таким образом, любой "ENTITY" может не иметь ни одного адреса для нескольких адресов (доставка, выставление счетов, рассылка) и ни одного номера для нескольких телефонных номеров (факс, основной, биллинг, сотовый, домашний). Могут быть другие способы сделать это, но это решение, которое я закончился.

МАГАЗИНЫ и ПОЛЬЗОВАТЕЛИ из старой базы данных должны сохранить свои старые PK и получить дополнительный ENTITY fk. Как я могу сделать это, не создавая дамп и не редактируя его вручную?

6
задан edl 19 February 2011 в 23:38
поделиться