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 pour éviter les valeurs <= 0


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par défaut Trigger pour éviter les valeurs <= 0
    Bonjour.

    Je viens de découvrir les triggers et désirant apprendre, j'essai dans créer un afin de prévenir l'insertion de valeurs négatives ou 0 dans une table en utilisant un trigger.

    table1 :
    col1 : Integer
    col2 : Varchar(32)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table1 (col1, col2) VALUES (1, 'azerty');
    Dans ce cas c'est bon : On insert.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table1 (col1, col2) VALUES (0, 'azerty');
    Ce n'est pas bon : On insert pas parceque col1 <=0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table1 SET col1 = -1, col2 = 'azerty' WHERE col1 = '1' AND col2 = 'azerty'
    Dans ce cas : On supprime l'enregistrement parceque col1 <= 0


    Dans le cas de l'update je pense qu'il y aura un soucis de vérouillage de la table parceque j'ai ce genre de problème avec un trigger after update sur la table1.

    Merci.

  2. #2
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Tu n'as pas besoin de faire un trigger pour cela. Il suffit de rendre ton champ UNSIGNED. Ainsi, seul les valeurs >=0 peuventre être inséré.
    Mais admettons :
    Il y a un autre problème. Tu modifies l'information après l'insertion.
    Il suffit d'executer le trigger en BEFOR UPDATE ou BEFOR INSERT. Tu contrôles avant qu'elle soit enregistré. Ainsi tu n'as pas à retourner dans la table pour modifier la données. Je rajouterais en plus que c'est pas trop possible.

  3. #3
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par défaut
    Merci.

    Je fais ça pour apprendre à utiliser les triggers (c'est un exercice) parceque là je peine un peu. Je n'arrive pas à lui dire de rien faire, ou de détruire l'enregistrement dans le cas ou les conditions ne sont pas remplies.

  4. #4
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Tu veux refuser l'enregistrement ou reformater la données mal formé ?

  5. #5
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par défaut
    Je dirais les deux.

    1 - Ne pas enregistrer si col1<=0
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table1 (col1, col2) VALUES (0, 'azerty');
    Dans un second temps :

    2 - Supprimer automatiquement un enregistrement quand la valeur de col1<=0
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table1 SET col1 = -1, col2 = 'azerty' WHERE col1 = '1' AND col2 = 'azerty'

  6. #6
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Tu ne peux pas empecher une opération d'écriture si elle a été lancé. Le trigger n'est pas tellement fait pour cela. Il faut dans ce cas là, il est préférable d'utiliser des procedures stockés.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/06/2006, 08h53
  2. Problème pour classer les valeurs d'un champ
    Par AjJi dans le forum Access
    Réponses: 11
    Dernier message: 06/04/2006, 09h19
  3. requete pour compter les valeurs ds une colonne
    Par smariteau dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2006, 17h37
  4. Réponses: 2
    Dernier message: 13/11/2005, 18h03

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