我有 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
.. ..
我想复制old_customers
给new_customers
他们分配一个新的自动增量 id 并更新订单外键customer_id
。
如何在一个简单的 MySQL 查询中同时执行 INSERT 和 UPDATE?
一个基本的 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中发现的那样