Хорошо. Короче говоря, я пытался выполнить 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. Как я могу сделать это, не создавая дамп и не редактируя его вручную?