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

  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 291
    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 291
    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 944
    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 944
    Par défaut
    Dans ce contexte, pourquoi ne pas utiliser les Foreign Keys et les déclarer en ON DELETE CASCADE ?

  7. #7
    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 J'avoue mon ignorance
    Hello qi130 !

    Disons que là, je reste sans voix(ça doit être mon qi110 standard...). J'avoue ne pas connaître ce dont tu me parles. Je vais donc farfouiller de côté.
    Merci du tuyaux. Je vous tiens informer des suites des opérations.

  8. #8
    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 InnoDB vs MyISAM
    De retour...

    Très intéressant, et j'en prends bonne note pour plus tard. Malheureusement toutes mes tables actuelles sont en MyISAM. Or visiblement, il les faudrait en InnodB.
    Peut-être y a t'il un moyen de les faire toutes (30) changer de format ?

  9. #9
    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 on oublie la dernière
    Oui bien sûr on peut basuler de MyISAM à InnoDB. Promis je repose pas une question noob comme celle-ci !

  10. #10
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    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 944
    Par défaut
    Citation Envoyé par elvan49 Voir le message
    Oui bien sûr on peut basuler de MyISAM à InnoDB. Promis je repose pas une question noob comme celle-ci !
    Ce n'en est pas une

    Il aurait pu se faire que ton "décor" technique t'interdise l'utilisation du moteur InnoDB...
    - l'hébergeur ne veut pas de ce type de table
    - InnoDB n'est pas forcément gratuit en exploitation
    - etc...

  11. #11
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    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 944
    Par défaut
    Citation Envoyé par elvan49 Voir le message
    Peut-être y a t'il un moyen de les faire toutes (30) changer de format ?
    For example, to convert a table to be an InnoDB table, use this statement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE t1 ENGINE = InnoDB;

  12. #12
    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 Foreign KEY, that is the solution !
    Et bien un grand merci pour la solution "Foreign Key".

    J'ai viré ma procédure stockée, et créé ma clé et mon index avec ON DELETE CASCADE.
    Résultat nickel, et en une seule requête. Donc très satisfaisant.

    Merci encore (je vais quand même vérifier que le serveur distant accepte innodB, si ce n'est pas le cas... on changera d'hébergement )

+ 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