Ok。つまり、私は次のようなINSERTSELECTを実行しようとしていました。
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()を返すのではなく、最後の挿入からの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 | | | |
+--------------+---------------------+------+-----+------------+----------------+
なぜ私はこれをしたいのですか?基本的に、住所や電話番号など、「USERS」に共通のフィールドを持つ「STORE」エンティティがあります。したがって、「ENTITY」には、複数の住所(配送、請求、郵送)がなく、複数の電話番号(ファックス、メイン、請求、携帯電話、自宅)がない場合があります。これを実現する方法は他にもありますが、これが解決策です。で終わった。
古いデータベースのSTOREとUSERSは、古いPKを保持し、追加のENTITYfkを取得する必要があります。ダンプを作成して手動で編集せずにこれを行うにはどうすればよいですか?