Maison >base de données >tutoriel mysql >Comment puis-je insérer des données dans plusieurs tables simultanément dans MySQL ?

Comment puis-je insérer des données dans plusieurs tables simultanément dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 01:33:02329parcourir

How Can I Insert Data into Multiple Tables Simultaneously in MySQL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn