Maison  >  Questions et réponses  >  le corps du texte

Opération SQL pour copier des lignes d'une table à une autre lorsque l'index change

Description du statut

J'ai deux bases de données, DB1DB2,它们具有相同的表 Author,其中字段为 Author.IDAuthor.AuthorName.

Le champ Author.ID de

DB1.Author DB1.AuthorAuthor.ID 字段 AUTO_INCRMENT,而 DB2.Author 没有 AUTO_INCRMENT,因为它依赖于 DB1 a

AUTO_INCRMENT, tandis que DB2.Author

n'a pas Author.ID 上的 PRIMARY 索引和 Author.AuthorName AUTO_INCRMENT car cela dépend de Exactitude des données DB1.

Les deux tables ont des index uniques sur DB2.Author 具有从 DB1.Author.

Lignes copiées.

Les deux bases de données utilisent
MariaDB

version 10.6.7.

QuestionDB1 管理员删除了 DB1.Author

quelques entrées dans le tableau, puis réorganisé l'index afin qu'il n'y ait pas de lacunes dans les numéros d'index. Cela signifie qu'ils peuvent avoir : IDNom de l'auteur1un2B3C

AuthorName'B'

Puis ils ont supprimé la ligne  : IDNom de l'auteur1un3C

Ils ont finalement mis à jour l'index pour qu'il n'y ait pas de lacunes (3-C changé en 2-C) : IDNom de l'auteur1un2C

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

Maintenant, je dois trouver un moyen de copier le statut mis à jour d'une ligne de DB1.Author vers DB2.Author

sans supprimer DB2.Author Tout dans le tableau
pour ne pas perdre de données pour l'effet CASCADE.

Quelle est la meilleure façon ?

ID 2 会尝试插入 'C' 的重复值,因为它IDMes clichés


C'est ce que j'ai fait, mais ça ne marche évidemment pas car en cas de clé en double il essaie de créer une autre clé en double (le doublon existe déjà sur 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;

Autres méthodes ? 🎜🎜 🎜Outre la solution de requête SQL possible, existe-t-il un autre moyen de mettre à jour automatiquement les données des tables dans une base de données lorsque les données sont modifiées dans une autre base de données ? Seules certaines tables doivent être copiées, pas d'autres tables liées. 🎜
P粉459440991P粉459440991186 Il y a quelques jours306

répondre à tous(1)je répondrai

  • P粉296080076

    P粉2960800762024-03-31 00:34:23

    TL;DR, votre problème est votre gestionnaire de base de données. La solution est pour lui de réparer les dégâts causés en restaurant les données à leur état antérieur. Supprimez simplement la ligne. La mise à jour de la clé primaire ne fonctionne jamais.

    Ne travaillez pas sur son erreur pour créer une solution ou la valider, car cela augmenterait les chances qu'elle se reproduise.


    Réponse complète.

    Votre problème actuel est votre « administrateur de base de données » qui enfreint une règle cardinale des bases de données : Ne mettez jamais à jour les valeurs des clés de substitution !

    Dans votre cas, la situation est encore plus tragique car les écarts dans les valeurs de la colonne ID n'ont de toute façon pas d'importance. Si l’écart est important, votre situation est encore pire. S'il vous plaît, permettez-moi de vous expliquer...

    Le nom de l'auteur est votre actuelidentifiant. Nous le savons car il a une contrainte unique.

    La colonne

    ID est une clé de substitution, implémentée de manière plus pratique sous la forme d'un entier à incrémentation automatique, mais les clés de substitution fonctionneront également correctement si la clé de substitution est un nombre aléatoire (unique). L'écart, ou même le choix de la valeur elle-même, n'a rien à voir avec la validité de la clé de substitution.

    répondre
    0
  • Annulerrépondre