Insérer MySQL dans plusieurs tables
Tenter d'insérer des données dans plusieurs tables avec une seule requête MySQL peut donner des résultats inattendus. Bien qu'il puisse sembler que plusieurs requêtes pourraient résoudre le problème, la corrélation de l'ID d'incrémentation automatique de la table utilisateur avec l'ID utilisateur manuel de la table de profil présente un défi.
Utiliser les transactions et LAST_INSERT_ID()
Pour insérer dans plusieurs tables en une seule transaction, utilisez ce qui suit approche :
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;
Stockage de l'ID d'incrémentation automatique dans une variable
Alternativement, stocker l'ID d'incrémentation automatique dans une variable permet de le référencer dans les requêtes ultérieures. Ceci peut être réalisé en utilisant :
Variable MySQL :
INSERT INTO ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...);
Variable PHP :
INSERT ... $result = mysql_query("SELECT LAST_INSERT_ID()"); $id = mysql_result($result, 0); INSERT INTO table2 ($id, ...);
Transaction Considérations
Quelle que soit l'approche choisie, considérez l'impact potentiel d'une exécution interrompue. En l'absence de transactions, des incohérences peuvent survenir dans votre base de données. Pour éviter cela, enveloppez les instructions insert dans une transaction, comme démontré ci-dessus.
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!