Je suis à la recherche de conseils et de pointeurs pour un petit projet que je fais. J'ai quelques idées mais je ne suis pas sûr que ce soit la meilleure pratique. J'utilise mysql et php.Insertion de clés étrangères et de clés primaires mysql dans une transaction.
J'ai une table appelée nomming dans la base de données.
Il a une clé primaire appelée identifiant de ligne qui est un nombre entier.
Ensuite, j'ai environ 8 autres tables faisant référence à cette table. Appelées nomplu, accsing, accplu, datsing, datplu par exemple. Chacun a une colonne qui fait référence à la clé primaire de la création. Avec mon code php j'ai toutes les informations à insérer dans les tables sauf une chose, la clé primaire de la table de nommage. Alors que PHP crée une série d'insertions comme suit.
INSERT INTO nomsing(word,postress,gender) VALUES (''велосипед","8","mask").
INSERT INTO nomplu(word,postress,NOMSING?REFERENCE) VALUES (''велосипеды","2",@the reference to the id of the first [email protected]).
Il y a plus d'inserts mais celui-ci fait passer le point. Le second insert doit référencer l'identifiant généré automatiquement pour le premier insert. J'étais cela pour travailler comme une transaction de sorte que tous les insertions devraient être terminées ou pas. Une idée que j'ai est de ne pas générer automatiquement l'ID et de le générer moi-même en PHP. De cette façon, je connaîtrais l'identifiant donné avant la transaction, mais je devrais vérifier si l'identifiant était déjà dans la base de données.
Une autre idée que j'ai est de faire le premier insert, puis d'interroger l'identifiant de ligne de cet insert dans php, puis de faire le second insert. Je veux dire que les deux devraient fonctionner mais ils ne semblent pas être une solution optimale. Je ne connais pas très bien les fonctionnalités transactionnelles de la base de données, mais quelle serait la meilleure approche à adopter dans ce cas. Je n'aime pas l'idée d'insérer puis d'interroger l'ID puis d'exécuter le reste des requêtes. Juste semble très inefficace ou peut-être que je me trompe.
vérifier cela: http://stackoverflow.com/questions/621369/sql-insert-and-catch-the-id-auto-increment-value – mostruash
dans les transactions 'new.PK_field_name_in_inserted_table' retournera le dernier identifiant inséré pour le courant session. Vous pouvez donc l'utiliser dans des transactions créées manuellement. Je ne sais pas si c'est ce que tu veux mais j'espère que ça aide. En passant, il y a une erreur de syntaxe dans vos requêtes. – Leri
Cela semble très bien. Je vous remercie. Savez-vous si cette fonction mysql_insert_id est thread-safe. Je veux dire si un utilisateur appelle l'insert, puis un autre à une fraction de seconde plus tard. Puis, lorsque le premier utilisateur appelle get ID, il obtient l'identifiant de l'insert du second utilisateur. – KennyBartMan