mysql - 将四个表合并为两个表,并具有链接的唯一列 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 不再与来自 db_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 的第一注 |
解决方案
你让它变得复杂。
如您所见,如果您在 Ì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<>在这里摆弄
推荐阅读
- python - 将项目添加到列表,然后根据输入更新一行
- android - 无法使用 NodeJS Admin SDK 向设备发送 FCM 通知
- python - 图表是在额外的图中绘制的,而不是在子图中
- c++ - 为什么使用动态数组而不是常规数组?
- rust - 使用 path["../xxx.rs"] 导入模块怎么样?
- java - 在java中哪里可以找到“load_der_public_key”的相同实现
- multithreading - 用协程替换具有状态变量的线程
- python - python > 请求模块 > 发布 > 标头不起作用
- arduino - 显示 SSD1306 在 esp32 上一段时间后停止工作
- google-app-engine - 为什么谷歌应用引擎似乎使用旧代码?