私は3つのテーブルを持っています
old_customers
id name
5 Mario
13 John
.. ...
new_customers
id name address
7 Luigi Roma
.. ... ...
orders
id customer_id
1 5
2 7
3 13
.. ..
それらに新しい自動インクリメントIDを割り当て、注文の外部キーを更新するようにコピーold_customers
したいと思います。
この同時の INSERT と UPDATE を 1 つの単純な MySQL クエリで実行するにはどうすればよいですか? new_customers
customer_id
基本的な psudo-sql のアイデア
INSERT INTO new_customers (name) SELECT name FROM old_customers
AND
UPDATE orders SET customer_id=LAST_INSERT_ID() WHERE customer_id=old_customers.id
一週間後 ...
受け取った支援のおかげで、これは開発された MySQL ソリューションです:
CURSOR を宣言する PROCEDURE を作成し、INSERT+UPDATE フェッチ結果をループで作成します。
DELIMITER //
CREATE PROCEDURE move_costumers()
BEGIN
DECLARE fetched_id INT(3);
DECLARE fetched_name VARCHAR(50);
DECLARE my_cursor CURSOR FOR SELECT id,name FROM old_customers;
OPEN my_cursor;
BEGIN
DECLARE EXIT HANDLER FOR NOT FOUND BEGIN END;
LOOP
FETCH my_cursor INTO fetched_id,fetched_name;
INSERT INTO new_customers (name) VALUES (fetched_name);
UPDATE orders SET orders.customer_id = LAST_INSERT_ID()
WHERE orders.customer_id = fetched_id;
END LOOP;
END;
CLOSE my_cursor;
END//
Simple Cursor Traversal 2で見つけたように、制御変数とラベルのないループです