Vous avez été confronté à un dilemme : insérer des données dans plusieurs tables simultanément à l'aide d'une seule Requête MySQL. Cependant, vous avez découvert que ce n'est pas possible. Pour surmonter ce défi, vous avez envisagé d'utiliser plusieurs requêtes :
INSERT INTO users (username, password) VALUES('test', 'test') INSERT INTO profiles (userid, bio, homepage) VALUES('[id of the user here?]','Hello world!', 'http://www.stackoverflow.com')
Mais vous êtes maintenant confronté à un nouveau problème : comment attribuer l'ID d'auto-incrémentation de la table des utilisateurs à l'ID utilisateur "manuel" pour le table de profil ?
La réponse : utiliser des transactions
Bien que vous ne puissiez pas insérer dans plusieurs tables dans une seule commande MySQL, vous pouvez tirer parti des transactions. Voici comment :
BEGIN; INSERT INTO users (username, password) VALUES('test', 'test'); INSERT INTO profiles (userid, bio, homepage) VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com'); COMMIT;
Comprendre LAST_INSERT_ID()
La fonction LAST_INSERT_ID() vous permet de réutiliser les valeurs d'auto-incrémentation. Dans la deuxième instruction, LAST_INSERT_ID() récupérera automatiquement la valeur de la colonne d'auto-incrémentation insérée dans la première instruction.
Méthodes alternatives
1. Utilisation de variables MySQL :
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...); INSERT INTO table3 (@mysql_variable_here, ...);
2. Utilisation de PHP ou d'autres variables de langage :
Remarque sur la transaction Cohérence
Il est crucial d'encapsuler vos requêtes dans une transaction pour garantir la cohérence des données, ce qui signifie que soit toutes les requêtes réussissent, soit aucune ne réussit. Si l'exécution est interrompue entre les requêtes, certaines tables peuvent avoir inséré des enregistrements alors que d'autres ne l'ont pas fait. Les transactions garantissent que cela ne se produira pas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!