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

SQL Procédural MySQL Discussion :

Eye of the trigger


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut Eye of the trigger
    Bonjour j'ouvre mon nouveau problème dans un nouveau fil, l'ancien commençant à être un peu long.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DELIMITER $$
    CREATE TRIGGER delete_cascade_element
    AFTER DELETE ON T1
    FOR EACH ROW
    BEGIN
    DELETE FROM T2 WHERE T2_id=Old.T1_id;
    END$$
    DELIMITER ;
    J'ai deux table T1 et T2.
    Une entrée T1 a une colonne parent qui pointe sur une autre entrée T1.
    T2 à pour identifiant le même id que l'entrée sur T1 à laquelle il correspond.

    T1 a la propriété on cascade delete activé, et qui fonctionne.



    Mon pb -> le trigger fonctionne partiellement, càd lors d'une suppression d'une entrée sur T1, la suppression se passe sur l'entrée correspondante sur T2.
    En revanche si la suppression est soumise "à la cascade" ça ne marche pas.

    Ou est mon erreur..?

    Merci bien.

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    comme je l'ai dit dans l'autre post tu dois le paramètrer au niveau de la colonne concernée et en myisam je suis pas sur que ça marche... il me semble que tu dois être en innodb

  3. #3
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    T1 est en innoDB.
    T2 en MyIsam.

    Quand je fais un delete sur T1 et que l'entrée a un fils(qui se supprime bien), mysql ne considère pas ça comme une condition pour "rentrer" dans mon trigger ?

    Je trouve ça illogique.
    ça voudrait dire que un delete et un delete issu d'une cascade ne sont pas fait de la même manière.

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    ton trigger est local à une table

    la cascade est un comportement d'intégrité référentielle

    donc pas du tout les même choses même si ça touche à une action commune qui les déclenche

  5. #5
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Donc la seule solution, serait de virer mes foreign key et mon cascade et de mettre un trigger à la place

    on delete, delete fils ET delete sur T2.

    ça semble propre mais niveau performance, j'en ai aucune idée.

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    lit ça : contrainte de cascade

    tu peux les laisser, ça les auto indexe au moins...

    mais sinon je pense que c'est la solution...

    ou change le moteur de ta table myisam...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Projet en cours] Dungeon Eye - Remake de Eye of the Beholder II
    Par iliak dans le forum Projets
    Réponses: 5
    Dernier message: 01/08/2011, 15h56
  2. Unable to list the triggers sqlstate = 42703
    Par The Ditch dans le forum PowerAMC
    Réponses: 0
    Dernier message: 23/05/2011, 19h53
  3. [Recrutement] Scénariste / Level Designer pour un clone de Eye of the Beholder II
    Par iliak dans le forum Projets
    Réponses: 1
    Dernier message: 18/05/2011, 01h29

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