Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2006, 12h09   #1
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Par défaut Problème trigger BEFORE UPDATE

Bonjour.
J'essais de créer un trigger qui n'autorise qu'un seul enregistrement ayant le champs "true". En faite, c'est la langue par defaut j'ai pensé au trigger dans le cas ou il y a malin qui joue dans la table directement.
Voici le trigger.
Code :
1
2
3
4
5
6
7
8
9
CREATE TRIGGER OneDefautInLangueFordefaut 
  BEFORE UPDATE ON langue 
  FOR EACH ROW  
  BEGIN  
    IF new.defaut =1 THEN  
      UPDATE langue SET defaut =0 WHERE idlangue <> old.idlangue;
      SET defaut = old.defaut;
    END IF
  END
Mais apparement il aime pas le UPDATE et je nevois pas qu'il pourrait le gener.
Aurais-je raté quelque chose ?
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 13h08   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Qu'est-ce qui ne fonctionne pas exactement ? Ca serait pas SET new.defaut = old.defaut ?

PS : merci de mettre un titre explicite à tes posts
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 13h55   #3
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Extrait de l'autre post
Citation:
... l'utilisateur peut décider quelle sera la langue par défaut parmis une liste qu'il aura renseigner. Très logiquement, il ne peut qu'avoir qu'une langue par défaut. Si le renseignement de la langue par défaut n'existe pas pour x raison c'est la table parametre qui prend le relais. C'est empecher qu'il puisse y avoir plus d'une enregistrement ayant "true" sur défaut.
Voila pourquoi je voulais faire un udpate de tout les enregistements defaut=0 (tynint(1)) puis faire un update sur l'enregistrement en question à 1.
Exemple :

idlangue | langue | defaut
1 | Français | x
2 | Englais |
3 | Allemand |

UPDATE langue SET defaut = 1 WHERE idlangue = 3

idlangue | langue | defaut
1 | Français |
2 | Englais |
3 | Allemand | x


Désolé pour le titre
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 14h55   #4
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Heu oui mais ça répond pas vraiment à la question... tu as essayé SET new.defaut au lieu de SET defaut ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 15h03   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Voici la nouvelle version
Code :
1
2
3
4
5
6
DROP TRIGGER OneDefautInLangueFordefaut ;
CREATE TRIGGER OneDefautInLangueFordefaut 
  BEFORE UPDATE ON langue 
  FOR EACH ROW  
      UPDATE langue SET defauts=0;
      SET new.defauts= old.defauts;
J'ai l'erreur suivant : #1193 - Unknown system variable 'defauts' ceci à la ligne SET new.defauts= old.defaut
Au départ je pensais que c'étais un mot reservé mais apparément non le mot réservé c'est default en cas ou j'ai placé un "s".
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 15h22   #6
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
C'est un problème de délimiteur. Ton trigger s'arrête au UPDATE là et le SET devient une instruction à part.

De plus, il te faut un BEGIN ... END si tu as plusieurs instructions dans le trigger.

Et enfin, il me semble que c'est interdit de modifier la table concernée par le trigger.
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 16h02   #7
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Merci pour l'information. J'ai des problèmes avec le delimiter mais je pense que c'est dù a phpmyadmin. En ligne de commande je ne sais pas choisir ma base de données pour tester
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 16h11   #8
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
Avec le client console, tu choisis ta base par défaut avec USE :

C'est l'équivalent de mysql_select_db().

Sinon, si tu préfères (ce dont je doute), tu peux préfixer ton trigger et tes tables par le nom de la base.
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 16h55   #9
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par Biglo
Avec le client console, tu choisis ta base par défaut avec USE :

C'est l'équivalent de mysql_select_db().

Sinon, si tu préfères (ce dont je doute), tu peux préfixer ton trigger et tes tables par le nom de la base.
Merci pour la commande.

s'te honte quand même de demander cela .

Bref, je teste ça des ce soir. Si ça ne fonctionne pas je gère cela par code ce qui est plus simple mais bon tant pis s'il y a quelqu'un qui tente de jouer dans la base de données.

Merci pour vos intervention.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h18.


 
 
 
 
Partenaires

Hébergement Web