2010-10-31 3 views
0

J'ai cherché cela mais pas de chance jusqu'à présent. J'ai deux tables dans mysql, elles sont configurées en tant que parent-enfant. La table parente a un champ de type auto_increment et l'enfant a un champ qui référence la colonne autoincrement dans le parent. Quand je fais des insertions dans la table des parents tout va bien. Mais quand je l'insère sur la table enfant, il me donne une exception qui dit qu'il n'y a pas de valeur de colonne de référence dans la table parent. La question est, comment puis-je actualiser la valeur de l'ID auto-incrémenté APRES L'INSERTION de sorte que l'enfant ait une référence à cela avant d'exécuter son UPDATE (ou insérer dans ce cas).problème d'auto-incrustation mysql

+0

J'ai supprimé la balise C# car cela n'a rien à voir avec C#. –

+0

@Albin Sunnabo: Je pense que la solution à cela impliquera du code C#, donc la balise C# est probablement pertinente. Cependant, cette question est difficile à répondre sans plus d'informations. En particulier, je voudrais voir le code C# utilisé pour effectuer la mise à jour/insertion et le massage d'erreur exacte. –

Répondre

1

Lors de l'insertion d'un nouvel enregistrement, insérez toujours dans le parent en premier. Obtenez la valeur auto_increment (utilisez LAST_INSERT_ID() dans mysql), et utilisez ceci dans la table enfant. Au tout début, vous pouvez commencer une transcation, donc si quelque chose ne va pas lors de l'insertion dans l'enfant, vous pouvez revenir en arrière.

0

Votre question est un peu floue, mais je suppose que vous avez une contrainte de clé étrangère sur une colonne dans la table enfant qui fait référence au champ auto_increment dans la table parent, correct?

Dans ce cas, vous devez définir une valeur valide dans la colonne FK de la table enfant pour chaque mise à jour ou insertion dans la table enfant. Avez-vous toujours une erreur si vous faites cela?

La question est, comment puis-je rafraîchir la valeur de l'identifiant autoincrement APRÈS L'INSERT pour que l'enfant a une référence à cette avant d'exécuter son UPDATE (ou insérer dans ce cas).

Cela n'a pas de sens pour moi. Que voulez-vous dire par actualiser la valeur de l'ID auto-incrémenté? Normalement, après l'insertion dans la table parente, vous récupérez la valeur auto_increment générée (cela dépend de l'API que vous utilisez, mais toutes les API de base de données peuvent le faire), définissez cette valeur sur la colonne appropriée de l'enfant table, puis insérez/mettez à jour la table enfant.

0

Il semble que vous souhaitiez insérer un nouvel enregistrement dans la table parent en même temps que vous insérez le nouvel enregistrement dans la table enfant. Essayez le faire avec une procédure stockée? De cette façon, vous pouvez faire l'insertion dans la table parente, stocker l'identificateur dans une variable, puis enregistrer cette variable dans le champ de clé étrangère dans le nouvel enregistrement de la table enfant.