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 16/08/2006, 15h17   #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 Intedire l'édition d'un champs.

Bonjour
J'ai une table qui va contenir un entier. Cette entier est en faite un sum d'une autre table. Je ne pense pas pouvoir faire une clé étranger d'un resulstat d'un sum. Quoi que en réfléchissant via une vue est ce possible ?. Bref, je voudrais savoir s'il était possible d'interdire l'edition d'un champs dont le resultat represente un sum d'une autre table.
Mysql 5.x
__________________
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 16/08/2006, 18h45   #2
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
Salut,

Je ne vois pas vraiment comment interdire l'accès "en écriture" à une colonne. Ca m'étonnerait fortement que ça soit faisable avec une clé étrangère !

A quoi penses-tu quand tu parles de faire une vue ?

Il y aurait peut-être la solution du trigger qui après chaque update de la table qui contient cette somme vérifie si la somme est correcte, sinon remet la bonne valeur (et encore, si je me rappelle bien, on ne peut pas modifier les tables concernées par le trigger).

En fait, pourquoi veux-tu absolument interdire une modification ? Y a-t-il un risque que via ton application une modification ait lieu ?
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 19h02   #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
Pour la vue. Dans la vue il y aura un champ qui aura pour resultat le sum d'une autre table. ce champs je le déclare comme clé etrangere sur la table finale comme ça il ne peut modifier cette valeur.

Pourquoi? En faite c'est le stock des produits mais ce stock peut être issu de plusieurs paramètres issu de d'autre table. Si c'estqui fait que dans l'ensemble ça forme le stock total. Si les autres paramètres n'existe pas il peut modifier le champs dans le cas contraire il ne peut pas ça aura la valeur issu des autres paramètre.

Le trigger ne peut pas modifier la valeur de la table concerné. En gros : un trigger sur la table A peut seulement modifier les valeurs de la table B mais de la table A même si c'est befor update ?
__________________
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 16/08/2006, 20h21   #4
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
Je ne vois toujours pas comment tu pourrais faire ça avec une vue et une clé étrangère.

La meilleure façon est quand même de vérifier les critères dans ton application et de désactiver le champ "stock total" s'il le faut.

Pour la solution du trigger, il n'est en fait pas nécessaire de modifier la table. Tu peux modifier juste la nouvelle ligne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER |
 
CREATE TRIGGER nom_trig BEFORE UPDATE
    ON ta_table FOR EACH ROW
BEGIN
	-- les select éventuels pour récupérer les critères
 
	IF somme_ne_peut_pas_etre_modifiee THEN
		SET NEW.somme = OLD.somme;
	END IF;
END |
 
DELIMITER ;
Voilà, je sais pas si ça t'aide beaucoup
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 21h04   #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
Merci beaucoup je vais étudier cela de très prèt. Je contrôlerais depuis l'application mais je veux contrer celui qui fourera ça truffe dans les enregistrements et que ça fausse les resultats. Que que je m'en fou il est responsable de se qu'il fait.
__________________
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 16h10.


 
 
 
 
Partenaires

Hébergement Web