SQL-Operation zum Kopieren von Zeilen von einer Tabelle in eine andere, wenn sich der Index ändert
P粉459440991
P粉459440991 2024-03-30 14:52:06
0
1
396

Statusbeschreibung

Ich habe zwei Datenbanken, DB1DB2,它们具有相同的表 Author,其中字段为 Author.IDAuthor.AuthorName.

Das Feld Author.ID von DB1.Author DB1.AuthorAuthor.ID 字段 AUTO_INCRMENT,而 DB2.Author 没有 AUTO_INCRMENT,因为它依赖于 DB1 hat

AUTO_INCRMENT, während DB2.Author

nicht Author.ID 上的 PRIMARY 索引和 Author.AuthorName AUTO_INCRMENT hat, weil es davon abhängt DB1 Datenkorrektheit.

Beide Tabellen haben eindeutige Indizes für DB2.Author 具有从 DB1.Author.

Kopierte Zeilen.

Beide Datenbanken verwenden
MariaDB

Version 10.6.7.

FrageDB1 管理员删除了 DB1.Author

einige Einträge in der Tabelle und dann den Index neu ordnen , sodass keine Lücken in den Indexnummern entstehen. Das bedeutet, dass sie möglicherweise Folgendes haben: IDName des Autors1eins2B3C

AuthorName'B'

Dann haben sie die Zeile gelöscht : IDName des Autors1eins3C

Sie haben den Index schließlich so aktualisiert, dass er keine Lücken mehr aufweist (3-C wurde in 2-C geändert): IDName des Autors1eins2C

DB1.Author 复制到 DB2.Author 而不删除 DB2.Author 表中的所有内容,这样我就不会'不会丢失 CASCADE

Jetzt muss ich eine Möglichkeit finden, den aktualisierten Status einer Zeile von DB1.Author nach DB2.Author zu kopieren,

ohne DB2.Author Alles in der Tabelle
, damit ich keine Daten für den CASCADE-Effekt verliere.

Was ist der beste Weg?

ID 2 会尝试插入 'C' 的重复值,因为它IDMeine Aufnahmen


Das habe ich getan, aber es funktioniert offensichtlich nicht, weil im Falle eines doppelten Schlüssels versucht wird, einen weiteren doppelten Schlüssel zu erstellen (das Duplikat existiert bereits auf 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;

Andere Methoden? 🎜🎜 🎜Gibt es neben der möglichen SQL-Abfragelösung noch eine andere Möglichkeit, die Tabellendaten in einer Datenbank automatisch zu aktualisieren, wenn die Daten in einer anderen Datenbank geändert werden? Es müssen nur einige Tabellen kopiert werden, andere verknüpfte Tabellen nicht. 🎜
P粉459440991
P粉459440991

Antworte allen(1)
P粉296080076

tl;博士,您的问题是您的数据库管理器。解决方案是让他/她通过将数据恢复到之前的状态来消除所造成的损害。删除行就可以了。更新主键永远都不行。

不要通过解决他/她的错误来创建解决方案或验证它,因为这样做会使它更有可能再次发生。


完整答案。

您的实际问题是您的“数据库管理员”,他违反了数据库的基本规则:永远不要更新代理键值!

在您的情况下,情况更加悲惨,因为 ID 列值中的间隙无论如何都无关紧要。如果差距确实很重要,那么你的情况就更糟了。请允许我解释一下...

作者姓名是您的实际标识符。我们知道这一点是因为它有一个独特的约束。

ID 列是一个代理键,最方便地实现为自动递增整数,但如果代理键是随机(唯一)数字,那么代理键也可以正常工作。间隙,甚至值本身的选择,与代理键的有效性无关。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage