web-dev-qa-db-fra.com

Utilisation de l'ID d'incrément automatique d'une requête en tant que FK de l'insert suivant

Je ne sais pas si je suis surchargé cela ou si je ne peux pas voir le bois pour les arbres.

J'ai deux tables, les deux ont un identifiant d'incrémentation automatique.

Table 1:
ID - auto
field - int
other field - varchar

Table 2:
ID - auto
Table1Id - FK
field - varchar

la première table stocke un article et le 2e stocke l'emplacement des images qui lui sont liées.

Pour ma forme qui télécharge les données, toutes les informations à stocker sont prises. J'ai besoin d'exécuter deux inserts simultanément (que je réalise est Daft) en utilisant le même identifiant.

Mon plan (défectueux) consiste à insérer dans le tableau 1, à obtenir l'identifiant, puis à insérer dans le tableau 2.

l'un des problèmes si un utilisateur accède au site dans l'écart entre les deux inserts et voit un gâchis.

existe-t-il un moyen plus facile, je pense avoir commis une erreur ou je manque quelque chose d'évident car il ne devrait pas être aussi difficile. :)

3
null

Ceci est (en partie) où les transactions sont entrées. En supposant que le niveau d'isolation de votre transaction est "lu engagé", "Lecture répétable" ou "Serializable" (MySQL) (MySQL par défaut à "Repetable Read" et que tout le paramètre le réglait à "Lire la lecture" est commettre des crimes contre les lois de l'univers), d'autres transactions sont aveugles (dans une certaine mesure) aux modifications apportées dans votre transaction.

Donc tu devrais:

START TRANSACTION;
INSERT #1;
INSERT #2;
COMMIT;

Les autres transactions ne seront pas en mesure de lire votre première ligne insérée (bien qu'elle puisse trouver la trace de son existence via des serrures - probablement pas intéressant pour vous). Ils ne pourront que lire vos changements ou aucun d'entre eux.

Encore une fois, cela dépend de l'hypothèse que ces transactions ne proviennent pas d'une connexion avec un niveau d'isolement "lu engagé" - qui, malheureusement, est quelque chose que quiconque est capable de changer pour leur propre connexion.

2
Shlomi Noach