Heim > Fragen und Antworten > Hauptteil
Statusbeschreibung
Ich habe zwei Datenbanken, DB1
和 DB2
,它们具有相同的表 Author
,其中字段为 Author.ID
和 Author.AuthorName
.
Das Feld Author.ID
von DB1.Author
DB1.Author
的 Author.ID
字段有 AUTO_INCRMENT,而 DB2.Author
没有 AUTO_INCRMENT,因为它依赖于 DB1
hat
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 verwendenVersion 10.6.7.
FrageDB1
管理员删除了 DB1.Author
ID | |
---|---|
1 | |
2 | |
3 |
AuthorName
为 'B'
ID | |
---|---|
1 | |
3 |
ID | |
---|---|
1 | |
2 |
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,
DB2.Author
Alles in der Tabelle CASCADE
-Effekt verliere. Was ist der beste Weg?
ID
2 会尝试插入 'C'
的重复值,因为它ID
Meine 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粉2960800762024-03-31 00:34:23
tl;博士,您的问题是您的数据库管理器。解决方案是让他/她通过将数据恢复到之前的状态来消除所造成的损害。删除行就可以了。更新主键永远都不行。
不要通过解决他/她的错误来创建解决方案或验证它,因为这样做会使它更有可能再次发生。
完整答案。
您的实际问题是您的“数据库管理员”,他违反了数据库的基本规则:永远不要更新代理键值!
在您的情况下,情况更加悲惨,因为 ID 列值中的间隙无论如何都无关紧要。如果差距确实很重要,那么你的情况就更糟了。请允许我解释一下...
作者姓名是您的实际标识符。我们知道这一点是因为它有一个独特的约束。
ID 列是一个代理键,最方便地实现为自动递增整数,但如果代理键是随机(唯一)数字,那么代理键也可以正常工作。间隙,甚至值本身的选择,与代理键的有效性无关。