如何将mysql表拆分_在MySQL中,如何将一个已有的表拆分为多个新的相关表?

本文详细指导了如何从旧的foo_old表中创建新表foo_new,同时将数据迁移并保持唯一性。通过UNION操作合并bar_new表,最后展示了foo_new和bar_new表的结构。涉及的关键步骤包括数据清洗、表结构设计和数据迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

foo_new

bar_new

CREATE TABLE foo_new (

id int NOT NULL AUTO_INCREMENT PRIMARY KEY,

name varchar(100),

id_bar_1 int,

id_bar_2 int

);

CREATE TABLE bar_new (

id int NOT NULL AUTO_INCREMENT PRIMARY KEY,

name varchar(100),

code int,

UNIQUE (code)

);

foo_old

INSERT INTO bar_new (name, code)

SELECT DISTINCT bar_name_1 name, bar_code_1 code FROM foo_old

UNION

SELECT DISTINCT bar_name_2 name, bar_code_2 code FROM foo_old;

INSERT INTO `foo_new` (name, id_bar_1, id_bar_2)

SELECT f.name, b1.id, b2.id

FROM foo_old f

JOIN bar_new b1 ON (b1.code = f.bar_code_1)

JOIN bar_new b2 ON (b2.code = f.bar_code_2);

CREATE TABLE foo_old (

id int NOT NULL PRIMARY KEY,

name varchar(100),

bar_name_1 varchar(100),

bar_code_1 int,

bar_name_2 varchar(100),

bar_code_2 int

);

INSERT INTO foo_old VALUES (1, 'foo1', 'bar1', 1, 'bar2', 2);

INSERT INTO foo_old VALUES (2, 'foo2', 'bar6', 6, 'bar5', 5);

INSERT INTO foo_old VALUES (3, 'foo3', 'bar4', 4, 'bar3', 3);

INSERT INTO foo_old VALUES (4, 'foo4', 'bar2', 2, 'bar7', 7);

INSERT INTO foo_old VALUES (5, 'foo5', 'bar6', 6, 'bar5', 5);

INSERT INTO foo_old VALUES (6, 'foo6', 'bar4', 4, 'bar1', 1);

INSERT INTO foo_old VALUES (7, 'foo7', 'bar7', 7, 'bar4', 4);

INSERT INTO foo_old VALUES (8, 'foo8', 'bar3', 3, 'bar8', 8);

SELECT * FROM foo_new ORDER BY name;

+----+------+----------+----------+

| id | name | id_bar_1 | id_bar_2 |

+----+------+----------+----------+

| 3 | foo1 | 1 | 4 |

| 6 | foo2 | 2 | 7 |

| 5 | foo3 | 3 | 6 |

| 4 | foo4 | 4 | 5 |

| 7 | foo5 | 2 | 7 |

| 1 | foo6 | 3 | 1 |

| 2 | foo7 | 5 | 3 |

| 8 | foo8 | 6 | 8 |

+----+------+----------+----------+

8 rows in set (0.00 sec)

SELECT * FROM bar_new ORDER BY name;

+----+--------+------+

| id | name | code |

+----+--------+------+

| 1 | bar1 | 1 |

| 4 | bar2 | 2 |

| 6 | bar3 | 3 |

| 3 | bar4 | 4 |

| 7 | bar5 | 5 |

| 2 | bar6 | 6 |

| 5 | bar7 | 7 |

| 8 | bar8 | 8 |

+----+--------+------+

8 rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值