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 :

Empêcher l'insertion des données avec un trigger


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par défaut Empêcher l'insertion des données avec un trigger
    Bonjour à tous,

    je suis entrain de créé un trigger pour ma table messagearticle sous mysql qui à pour rôle d'empêcher l'insertion des lignes qui sont existent dans la table
    pourrez vous m'aidez pour résoudre ce problème .

    Merci


    c'est le code

    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 datasources.test BEFORE INSERT ON `datasources`.`messagearticle` 
    FOR EACH ROW 
    BEGIN 
    DECLARE titre varchar(200); 
     
    set titre= (select TITRE from datasources.messgearticle where NOM_AUTEUR =New.NOM_AUTEUR and TITRE =New.TITRE and date= New.DATE ) ; 
    IF(titre is not null) 
    THEN 
     
    END IF; 
    END; // 
    delimiter ;

  2. #2
    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
    C'est inutilement compliqué. Pour empêcher de saisir des lignes déjà présente, on définit des clés uniques.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par défaut
    merci pour votre réponse mais ça ce que j'ai pensé à faire en première lieu j'ai essayer de modifier le clé primaire ma table messagearticle mais mysql m'affiche des exceptions de type erreur to rename il m a pas accepter les modidificatons

  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
    Tu peux créer des clefs uniques indépendamment de la clé primaire (CREATE UNIQUE INDEX...).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Par défaut
    bonjours,
    vos réponse ne réponde pas a la questions initial, et cette question m'interesse... le moteur de recherche m'amenant a cette non reponse

    juste pour les gus qui recherche ce genre de chose (moi en tête), pourriez vous apporté le bout de code manquant a l'exemple 1er...
    pour ma part, c'est pour compenser l'absence de foreignkey sous MyISAM

    en gros a l'insert (before) je verifie si les clé étrangère existe dans leur table source, sinon je n'entre pas la ligne (complete), la requette ci dessous est bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mysql> SELECT COUNT( pays_id ) 
        -> FROM  `pays` 
        -> WHERE  `pays`.`pays_id` =  'FR'
        -> LIMIT 1;
    +------------------+
    | COUNT( pays_id ) |
    +------------------+
    |                1 |
    +------------------+
    1 row in set (0.00 sec)
    reste a empecher l'insertion si (pays.pays_id = NEW.pays_id) = 0
    ou laisser s'enregistrer si = 1

    mais la je n'arrive a rien, mysql jamais content de la syntax, celle de la doc ne fonctionne pas, des exemples non plus, et je suis obliger de le faire sous myISAM .... please, un bout de code qui marche sur MySQL 5.1

  6. #6
    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
    Pour l'utilisation de triggers afin de valider les données, je vous invite à lire l'article de kazou : http://alain-defrance.developpez.com...integre-error/.

    Je pense que cette lecture vous convaincra que l'utilisation d'un trigger dans ce cas est plus tordue que ce qu'on pourrait penser. C'est pourquoi il est préférable de s'appuyer, dès que c'est possible, sur des mécanismes plus simples. Pour le cas soulevé par hazmza, la clé unique s'impose.

    Dans votre cas, je pense qu'un INSERT... SELECT conviendrait. Par exemple, si je suppose que vous voulez insérer le couple ('FR', 'hello France !') dans une table, à condition que 'FR' existe dans la table pays, cela donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO une_table (pays_id, blabla)
    SELECT pays_id, 'hello France !'
    FROM pays
    WHERE pays_id = 'FR'
    (je suppose ici que pays_id est la clé primaire de pays)

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/08/2014, 18h20
  2. Oracle et insertion des données avec accents
    Par Lolitaaa dans le forum Oracle
    Réponses: 17
    Dernier message: 07/04/2009, 15h14
  3. [MySQL] Insertion des données avec les caractères spéciaux
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/05/2008, 11h16
  4. Supprimer des données avec un trigger
    Par engi dans le forum SQL
    Réponses: 3
    Dernier message: 09/04/2008, 15h25
  5. [C#] problème avec l'insertion des données dans MySQL
    Par madica dans le forum Accès aux données
    Réponses: 7
    Dernier message: 08/11/2005, 13h27

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