[résolu]Interdire une suppression

Interdire une suppression [résolu] - SQL/NoSQL - Programmation

Marsh Posté le 15-04-2008 à 14:14:20    

Bonjour,
admettons que j'aie 2 tables sur une base mysql :
 

utilisateur (
 id int auto_increment not null primary key,
 nom varchar(150) not null,
 statut int not null references statut.id
);


 

statut (
 id int auto_increment not null primary key,
 nom varchar(150) not null
);


 
 
Ces deux tables sont gérées dans un site en php. Chaque utilisateur est obligé de choisir un statut.
Problème : quand on tente de supprimer un statut dans la table statut, la suppression a toujours lieu et ce même si le statut est utilisé par un utilisateur !
 
Comment faire pour interdire que la suppression ait lieu ? Pour l'instant je fais une requête de vérification, laquelle envoie une autre requête de suppression si tout va bien. Mais est-ce propre ? Existe-t-il des mots clés à mettre sur la table pour ce genre de cas, des triggers, ou n'importe ?
 
Merci :)


Message édité par tostiere le 15-04-2008 à 15:53:41
Reply

Marsh Posté le 15-04-2008 à 14:14:20   

Reply

Marsh Posté le 15-04-2008 à 14:19:08    

Utilise une contrainte du type ON DELETE RESTRICT.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 15-04-2008 à 14:59:02    

Merci pour ta réponse :)
 
En faisant une recherche sur le net, il faut si j'ai bien compris changer les tables en InnoDB, donc pour l'instant ça c'est fait et pas de problème.
 
Cependant en mettant ON DELETE RESTRICT après le champ "id" de la table "statut" j'ai le message d'erreur suivant :
 
#1064 - Erreur de syntaxe près de 'DELETE RESTRICT'
 
Si je le mets sur la table "utilisateur" il n'y a pas d'erreur mysql, cependant par la suite il ne se passe rien, c'est comme si je n'avais rien modifié (la suppression se fait toujours).
 
Pourrais-tu me donner un exemple d'utilisation ? Merci :)


Message édité par tostiere le 15-04-2008 à 14:59:31
Reply

Marsh Posté le 15-04-2008 à 15:33:33    

sircam a écrit :

Utilise une contrainte du type ON DELETE RESTRICT.


Faut surtout commencer par ajouter status_id en foreign key dans le user :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 15-04-2008 à 15:34:55    

Bon j'ai finalement réussi à faire quelque chose en reprenant les exemples du site de mysql :
 
http://dev.mysql.com/doc/refman/5. [...] aints.html
 
Mon seul problème est qu'en les appliquant à ma base mysql existante qui est beaucoup plus grosse que l'exemple au dessus, j'ai l'erreur suivante :
 
#1005 - Ne peut créer la table '.\base_bon\bon.frm' (Errcode: 150)  
 
Dans un autre forum ça serait à cause d'absence d'index... pourtant j'en ai bien mis. D'ailleurs ça fonctionne dès que j'enlève la table "bon", mais bon, comme cette table est le coeur même de ma base, j'avoue que je ne sais plus quoi faire.

Reply

Marsh Posté le 15-04-2008 à 15:52:11    

Merci Masklinn, c'est ce que j'avais remarqué aussi :)
 
Sinon finalement j'ai réussi à créer la base et appliquer mes contraintes.
 
En fait le problème de l'erreur était tout bête, il suffisait de mettre ma table "bon" à la fin de mon script sql vu qu'elle référence pas mal d'autres tables. En MyISAM ça ne pose pas de problème, en InnoDB par contre c'est différent apparement.
 
Donc si à l'avenir d'autres ont le même problème, sachez que pour créer des contraintes il faut créer des index et des foreign key, passer vos tables en InnoDB, et suivre en gros les exemples du site de mysql (lien plus haut).
 
Merci encore masklinn et sircam pour vos pistes :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed