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 :

[TRIGGER] erreur 1442 : le trigger se déclenche mais n'agit pas.


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 elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Par défaut [TRIGGER] erreur 1442 : le trigger se déclenche mais n'agit pas.
    Bonjour,

    J'ai un trigger attaché à ma base dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELIMITER //
    CREATE TRIGGER nettoyage_caractere AFTER DELETE ON caracteristique FOR EACH ROW
    BEGIN
        DELETE FROM nomcaracteristique WHERE OLD.cod_carac NOT IN(SELECT id_caracteristique FROM caracteristique);
    END//
    DELIMITER;
    celui-ci a bien été enregistré par la base (même dans phpMyAdmin)
    Or lorsque j'utilise mon script php de destruction d'un item dans la table `caracteristique` le trigger ne fonctionne pas.
    Je suis donc allé tester directement dans phpMyAdmin la destruction de l'item concerné et là...

    Voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     #1442 - Can't update table 'caracteristique' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    Donc je ne comprend pas. Apparement il ne peut pas updater tout de suite car le trigger est en train d'agir sur la table. Mais cette action se fait apès la destruction, donc... Est-ce cette confusion qui empèche le trigger d'agir ?

    Quelqu'un saurait-il m'aiguiller ?
    Merci

  2. #2
    Membre éclairé Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Par défaut Problème de simultanéité
    Bonjour,
    Il s'agit bien d'un problème de simultanéité.
    J'ai créé une VUE qui reprend la structure de ma table 'caracteristique' pour que le trigger agisse dessus, et le problème reste inchangé.

    Personne n'a des piste à me donner ??

  3. #3
    Membre éclairé Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Par défaut Franchement décevant !
    Je pensais vraiment pouvoir utiliser des TRIGGER dans mes tables MySQL. Or pour le moment, à part les stocker et ne pas pouvoir m'en servir, je n'ai réussi à rien d'autre.
    Pour le problème précédent, j'ai contourné (pour ceux que ça intéresse) de la manière suivante :
    Je crée une PROCEDURE STOCKEE qui détruit les items qu'aurait dû détruire mon TRIGGER, et je l'appelle après ma requête de destruction initiale...
    ... quasi aucun intérêt, un léger gain de temps du fait de la procédure stockée, c'est tout...

    Si quelqu'un a mieux ou trouve une solution au problème ci-dessus, je reste preneur.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Peux-tu expliquer la logique de ce que tu veux faire ?

  5. #5
    Membre éclairé Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Par défaut logique (ou pas...)
    Bonjour,

    J'ai plusieurs tables qui me permettent de gérer des caractéristiques de produits. (2 pour être exact). L'une comprend un identifiant et niveau de profondeur, qui sont les seuls éléments communs aux caractéristiques. L'autre, me permet de les gérer en multilingue (avec un nom, une référence à l'identifiant de la première table, un identifiant langue etc...
    Dans une interface d'administration (php5) je gère ces caractéristiques. Et donc je peux les supprimer. Je voulais que lorsque j'envoie une requête DELETE à la première table, il y ait un TRIGGER qui supprime dans le même temps les entrées dans la seconde table, dont les réfrérences à la première viennent d'être détruit.
    Prises séparemment toutes mes requêtes fonctionnent.
    Le TRIGGER plus haut (à quelques modif prés) est enregistré et se déclenche.
    Bien sûr, je pourrais gérer ça avec php et les requêtes, mais d'une part, il me semble qu'il ya un gain au niveau utilisation de la mémoire et des bandes passantes à utiliser un TRIGGER, et d'autre-part je trouve la solution plus élégante et satisfaisante d'un point de vue développement.

    Voilà, on peut en discuter bien sûr, mais voici la logique. Ais-je répondu à ta question Antoun ?

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Dans ce contexte, pourquoi ne pas utiliser les Foreign Keys et les déclarer en ON DELETE CASCADE ?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/10/2014, 12h27
  2. [Triggers] Erreur 1442
    Par boo64 dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 11/07/2011, 17h00
  3. TRIGGER Erreur PLS-00357
    Par fuhraih dans le forum Oracle
    Réponses: 6
    Dernier message: 19/04/2006, 10h20
  4. [10g] Trigger erreur de compilation
    Par flasomm dans le forum Oracle
    Réponses: 2
    Dernier message: 03/01/2006, 03h07
  5. [Debug] [Trigger] erreur d'exe pas très précise
    Par viena dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/08/2005, 11h36

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