IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Insertion dans plusieurs tables : Transaction ?


Sujet :

Requêtes MySQL

  1. #1
    Invité
    Invité(e)
    Par défaut Insertion dans plusieurs tables : Transaction ?
    Bonsoir,

    Je souhaite réaliser un INSERT dans plusieurs tables, et m'assurer que les données soient effectivement ajoutées dans chaque table.

    Problème :

    J'ai une table tbl_ressources , une table tbl_news et une table tbl_articles.

    La première table sert en faite d'abstraction aux deux autres.

    Exemple :

    Lorsque j'ajoute une news, je dois dans un premier temps effectuer un INSERT INTO tbl_ressource comportant diverses informations sur la resource (clé primaire, date de la resource, type de la resource (news ou article), auteur).

    Dans un second temps, je dois effectuer un INSERT INTO tbl_news avec clé primaire, titre de la news, son contenu ainsi que l'id de resource précédement créé (clé étrangère).

    Je pense que beaucoup de personnes ont été confrontées au même problème !

    Je me suis renseigné un peu et suis tombé sur le concepte de transaction, je ne sais pas si c'est adéquat, ou si il y'a une autre manière de s'assurer que les insertions se soient effectivement déroulées correctement et d'une seule traite.

    En ce qui concerne les suppressions et mises à jour, j'ai vu qu'il était possible d'automatiser le processus avec l'intégrité référentielle InnoDB... C'est toujours ça de réglé.

    Je cherche une solution, ou un début de solution compatible MySQL 4.1.

    Merci !

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Bonsoir,

    Tu as tout à fait raison de te tourner vers les transactions. Elles implémentent le concept ACID dont le premier principe est l'Atomicité, ce qui veut dire que soit toutes les requêtes SQL d'une transaction sont exécutées, soit aucune.

    Le moteur de stockage transactionnel pour MySQL est InnoDB. Voir ce tutoriel.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci pour les infos,

    Je suis parti sur une requête (simplifiée) ressemblant à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SET AUTOCOMMIT=0;
    START TRANSACTION;
     
    INSERT INTO tbl_ressources(ressource_id, type_id, ressource_metadonnees);
     
    VALUES(NULL, 1, 'Métadonnées');
     
    INSERT INTO tbl_news (news_id, ressource_id, news_titre, news_contenu)
     
    VALUES(NULL, LAST_INSERT_ID(), 'Titre de news', 'Contenu');
     
    COMMIT;

    Maintenant je souhaiterai tester si la première requête INSERT s'est déroulée correctement et si ce n'est pas le cas, effectuer un ROLLBACK.

    En parcourant quelques exemples SQL, j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF @@ERROR <> 0 ROLLBACK TRANSACTION;
    Mais apparement ce code n'est pas adapté à MySQL (c'est un exemple SQL Server), existe-il une autre syntaxe / constante ou fonction permettant de définir si il y a eu une erreur avex MySQL ?

    En consultant le manuel MySQL, on mentionne.. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SHOW COUNT(*) ERRORS;
    SELECT @@error_count;
    Es-ce son équivalant ?

Discussions similaires

  1. procedure stockée pour insertion dans plusieurs tables
    Par bigwal2007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 22/11/2007, 22h58
  2. Insertion dans plusieurs table avec un index commun
    Par irongomme dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2007, 11h41
  3. Insertion dans plusieurs tables en meme temps
    Par weed dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/07/2007, 11h13
  4. [SQL] Insertion dans plusieurs tables
    Par fadex dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2007, 11h47
  5. [Debutant]Insertion dans une table, Transaction et Procedure
    Par etiennegaloup dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/11/2005, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo