状态描述
我有两个数据库,DB1 和 DB2,它们具有相同的表 Author,其中字段为 Author.ID 和 Author.AuthorName。
DB1.Author 的 Author.ID 字段有 AUTO_INCRMENT,而 DB2.Author 没有 AUTO_INCRMENT,因为它依赖于 DB1 数据的正确性.
两个表都有 Author.ID 上的 PRIMARY 索引和 Author.AuthorName 上的唯一索引。
DB2.Author 具有从 DB1.Author 复制的行。
两个数据库均使用 MariaDB 版本 10.6.7。
问题
DB1 管理员删除了 DB1.Author 表中的一些条目,然后重新排序了索引以使索引号没有间隙。这意味着他们可能已经:
| ID | 作者姓名 |
|---|---|
| 1 | 一个 |
| 2 | B |
| 3 | C |
然后他们删除了 AuthorName 为 'B' 的行:
| ID | 作者姓名 |
|---|---|
| 1 | 一个 |
| 3 | C |
他们最终更新了索引,使其没有间隙(3-C 更改为 2-C):
| ID | 作者姓名 |
|---|---|
| 1 | 一个 |
| 2 | C |
现在我需要找到一种方法将行的更新状态从 DB1.Author 复制到 DB2.Author 而不删除 DB2.Author 表中的所有内容,这样我就不会'不会丢失 CASCADE 效果的数据。
最好的方法是什么?
我的镜头
这就是我所做的,但它显然无法工作,因为在重复键的情况下,它会尝试创建另一个重复键(重复的 ID 2 会尝试插入 'C' 的重复值,因为它ID 上已存在 3):
INSERT INTO DB2.Author (ID, AuthorName)
SELECT DB1.Author.ID, DB1.Author.AuthorName FROM DB1.Author
ON DUPLICATE KEY UPDATE
ID = DB1.Author.ID,
AuthorName = DB1.Author.AuthorName;
其他方法?
除了可能的SQL查询解决方案之外,是否还有其他方法可以在一个数据库更改数据时自动更新另一个数据库中的表数据?仅需要复制某些表,而其他链接表则不同。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号