首页 > 解决方案 > 将四个表合并为两个表,并具有链接的唯一列 ID

问题描述

我有两个数据库,都有两个表,并且想通过某种方法将一组表移动到另一组表中。我遇到的问题是表具有链接的 id,并且 id 应该是唯一的,但是在迁移时会发现重复项。链接的 id 是指在 account_info_{1|2} 中找到的 id 与在 notes_{1|2} 中找到的 account_id 相关联。我想到的第一个方法是一个简单的sql脚本比如`

INSERT INTO 
db_1.account_info_1
SELECT null, username FROM db_2.account_info_2;

INSERT INTO db_1.notes_1
SELECT null, note FROM db_2.notes_2;`

这个脚本的工作原理是现在不再有任何重复的 id,因为它允许 sql 相应地从 db_2 自动增加 id。这个问题现在是来自 db_2.account_info_2 的 id 不再与来自 d​​b_2.notes_2 的 account_id 链接。有没有办法将数据从 db_2 迁移到 db_1,同时避免取消链接 id 并防止重复?

注意:我确信我可以开发某种 php 脚本来解决这个问题,但我还在寻找一个 sql 脚本,因为 php 脚本与 sql 脚本相比会很长(我假设)

account_info_1

ID 用户名
1 用户名OfId1
2 用户名OfId2

笔记_1

ID 帐户ID 笔记
1 1 Id1 的第一注
2 1 2ndNoteOfId1
3 2 Id2 的第一注

account_info_2

ID 用户名
1 AcctTwo用户名
2 另一个AcctTwo用户名

笔记_2

ID 帐户ID 笔记
1 1 Id1 的第一注
2 1 2ndNoteOfId1
3 2 Id2 的第一注

标签: mysql

解决方案


你让它变得复杂。

如您所见,如果您在 ÌNSERT INTO ..SELECT` 中插入 id,则 MySQL 并不重要

他还可以“知道”下一个数字是哪个,因此将所有数据从一个数据库复制到第二个数据库。

我不知道,为什么你需要这个,但你有没有想过复制,以便自动复制更改

CREATE TABLE account_info_1
    (`id` int AUTO_INCREMENT PRIMARY KEY, `username` varchar(13))
;
    
INSERT INTO account_info_1
    (`id`, `username`)
VALUES
    (1, 'usernameOfId1'),
    (2, 'usernameOfId2'),
    (5, 'usernameOfId2')
;
CREATE TABLE account_info_2
    (`id` int AUTO_INCREMENT PRIMARY KEY, `username` varchar(13))
;
INSERT INTO account_info_2 SELECT * FROM account_info_1
SELECT * FROM account_info_2
编号 | 用户名     
-: | :------------
 1 | 用户名OfId1
 2 | 用户名OfId2
 5 | 用户名OfId2
INSERT INTO account_info_2 values (NULL,'test')
SELECT * FROM account_info_2
编号 | 用户名     
-: | :------------
 1 | 用户名OfId1
 2 | 用户名OfId2
 5 | 用户名OfId2
 6 | 测试         

db<>在这里摆弄


推荐阅读