Insérer des données dans plusieurs tables simultanément
L'insertion de données dans deux tables simultanément peut être réalisée dans MySQL, bien que cela nécessite une approche différente par rapport à l'instruction SQL fournie.
La requête fournie tente d'insérer des données à la fois dans les tables de visites et d'inscription en une seule opération. Cependant, ceci n'est pas directement pris en charge par MySQL car les instructions INSERT ne peuvent cibler qu'une seule table à la fois. Pour obtenir le résultat souhaité, vous disposez des options suivantes :
Traitement par lots
Exécuter deux requêtes INSERT distinctes par lots :
BEGIN; INSERT INTO visits (visit_id, card_id) VALUES (NULL, 12131141); INSERT INTO registration (registration_id, type, timestamp, visit_id) VALUES (NULL, 'in', UNIX_TIMESTAMP(), LAST_INSERT_ID()); COMMIT;
Procédure stockée
Créer une procédure stockée qui encapsule les deux inserts opérations :
CREATE PROCEDURE insert_into_tables( IN card_id INT, IN type ENUM('in', 'out'), IN timestamp INT ) BEGIN DECLARE visit_id INT; INSERT INTO visits (card_id) VALUES (card_id); SET visit_id = LAST_INSERT_ID(); INSERT INTO registration (registration_id, type, timestamp, visit_id) VALUES (NULL, type, timestamp, visit_id); END;
Vous pouvez ensuite invoquer la procédure stockée avec les paramètres souhaités :
CALL insert_into_tables(12131141, 'in', UNIX_TIMESTAMP());
Gestion des transactions
Pour vous assurer que les deux Les opérations d'insertion sont effectuées de manière atomique, enveloppez-les dans une transaction :
BEGIN TRANSACTION; INSERT INTO visits (visit_id, card_id) VALUES (NULL, 12131141); INSERT INTO registration (registration_id, type, timestamp, visit_id) VALUES (NULL, 'in', UNIX_TIMESTAMP(), LAST_INSERT_ID()); COMMIT;
En utilisant ces approches, vous pouvez insérer des données dans plusieurs tables simultanément dans MySQL.
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!