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 :

Problème trigger avec 2 requêtes


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème trigger avec 2 requêtes
    Bonjour,

    Je veux creer un trigger pour que lors de l'insertion d'une réservation, il supprime les réservations qui ont une date inférieure à la date actuelle.

    J'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DELIMITER $
    create trigger del_ancien_res 
    before insert
    on reservation for each row
    BEGIN
    	delete from stock_mat
    	where id_res in (select id_res
    	                    from reservation
    	                    where date_fin<sysdate());
     
    	delete from reservation
        where date_fin<sysdate();
    END$
    Mais lorsque que je fais une insertion, phpmyadmin m'affiche cette erreur :

    Nom : 2019-01-29 15_21_48-localhost _ 127.0.0.1 _ resa _ reservation _ phpMyAdmin 4.8.4.png
Affichages : 309
Taille : 4,4 Ko

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    En gros, ton problème est le suivant : tu ne souhaites pas conserver l'historique des réservations.
    Je ne suis pas sûre que tu aies besoin d'un trigger pour cela.
    Faudrait que tu nous montres la structure de tes 2 tables...
    Mais il serait plus simple et plus direct de mettre une clé d'unicité sur le champ id_stock_mat de ta table stock_mat...

    De ce que je comprends, clé unique sur id_stock_mat et ta requête devient

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into stock_mat values (214, 518) on duplicate key update id_res=518;


    table stock_mat(id_stock_mat,id_res)
    table reservation(id_res,date_deb,date_fin)
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    D'abord merci pour cette réponse si rapide.

    Voici mes tables :

    reservation (id_res, date_deb, date_fin)

    materiels (id_mat, ref_mat)

    stock_mat (id_stock, id_res, id_mat)

    stock_mat me sert a réserver plusieurs matériels.

    Je précise que je suis débutant, je ne comprend pas à quoi servirait une clé d'unicité.

    Je veux que les anciennes réservations soient supprimées, pourquoi le trigger ne fonctionne pas ?

    Encore merci

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut KioKou25.

    Citation Envoyé par KioKou25
    Je veux creer un trigger pour que lors de l'insertion d'une réservation, il supprime les réservations qui ont une date inférieure à la date actuelle.
    En somme, vous désirez automatiser la suppression des anciennes réservations lors de l'insertion d'une nouvelle réservation.

    Cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1442 (HY000) at line 100: Can't update table 'reservation' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    signifie que vous ne pouvez pas faire une opération (insert, update ou delete) sur la même table que celle qui est utilisé par le déclencheur.

    Dans le déclencheur, vous pouvez faire référence à la table "stock" de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    delete t1 from  `stock`       as t1
        inner join  `reservation` as t2
                on  t2.id = t1.clef_reservation
             where  t2.date < NEW.date;
    Par contre, pour la suppression, vous ne pouvez pas l'utiliser dans le déclencheur.
    Qu'est-ce qui vous empêche de faire un delete en dehors du déclencheur ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Je ne sais pas pourquoi je suis resté focalisé sur un trigger, je l'ai fais sans et ça marche ^^'

    Merci pour votre aide en tout cas !

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

Discussions similaires

  1. Problème lenteur avec une requête de recherche
    Par Bobtop dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/12/2007, 05h38
  2. Problème amusant avec une requète
    Par phoque.r dans le forum Requêtes
    Réponses: 5
    Dernier message: 11/04/2007, 11h20
  3. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  4. Réponses: 11
    Dernier message: 28/12/2004, 16h15
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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