information sur les foreign keys - nom interne

information sur les foreign keys - nom interne - SQL/NoSQL - Programmation

Marsh Posté le 06-07-2004 à 10:30:07    

bonojour,
j ai un probleme j ai une base de données avec pas mal de table en innoDB j ai rentré les foreign keys. Qques unes sont erronés (désolé je debute   :(  ) et j aimerais donc les supprimer ... or je les ai créé avec la commande alter table NOMTABLE add foreign key NOMDONNEES references NOMTABLE(NOMDONNEES);
donc j ai pas mis de nom et la commande pour les supprimer est alter table NOMTABLE drop NOMDELACONTRAINTE;
on m' as dis que quand on crée une clef etrangere sans nom il y avait un nom interne qui etait creer automatiquement? c vrai? si oui comment on fait pour le connaitre? j ai pas trouvé de doc sur ca ...

Reply

Marsh Posté le 06-07-2004 à 10:30:07   

Reply

Marsh Posté le 06-07-2004 à 10:44:03    

je précise que quand je fais show create table NOMTABLE; il ne me dis pas le nom interne !

Reply

Marsh Posté le 06-07-2004 à 11:47:37    

Il doit y avoir une solution simple et propre, mais bon, quand ça prends la tête, tu te poses pas de problème :
 
CREATE TABLE TAMBOUILLE AS SELECT * FROM NOMTABLE;
TRUNCATE NOMTABLE;
CREATE TABLE NOMTABLE AS SELECT * FROM TAMBOUILLE;
TRUNCATE TAMBOUILLE;
 
Et voilà, t'as viré toutes les contraintes :ange:


Message édité par Arjuna le 06-07-2004 à 11:49:38
Reply

Marsh Posté le 06-07-2004 à 13:00:33    

Sauf qu'il est visiblement sous MySQL et qu'ils ne savent pas encore faire ça :D
 
Faut qu'il définisse la structure de la table.
 
EDIT: et c'est pas truncate mais drop.


Message édité par gizmo le 06-07-2004 à 13:01:12
Reply

Marsh Posté le 06-07-2004 à 13:13:55    

truncate est plus rapide.

Reply

Marsh Posté le 06-07-2004 à 13:24:26    

Arjuna a écrit :

truncate est plus rapide.


truncate ne fait que virer les données, il ne modifie pas la structure, ni les FK

Reply

Marsh Posté le 06-07-2004 à 14:11:13    

ça détruit pas la table ? je croyais

Reply

Marsh Posté le 06-07-2004 à 17:41:33    

faut faire un DROP ...

Reply

Marsh Posté le 06-07-2004 à 18:47:44    

merci pour les reponses.
 
qqu'un saurait ou y a une doc qui explique la deuxieme partie de cette syntaxe (les on delete on update ...) ?
 
ALTER TABLE yourtablename ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
 
J ai trouvé des trucs sur le net mais c est du chinois pour moi
 
 
autre question sur les foreign key. Prenons l exemple simplifié suivant :
 
on a une table innoDB appellé UTILISATEUR avec login varchar(10) en clé primaire, motdepasse varchar(10), categorie varchar(10) ...
 
on a une seconde table ou on a un champs login qui est une clef etrangere de utilisateur ...
y a moyen que le champs utilisateur soit egal soit à NULL soit a un login de la table utilisateur? ou on est obligé que dès la creation d une ligne le login soit egal à un login de la table utilisateur?

Reply

Marsh Posté le 06-07-2004 à 18:57:47    

Par défaut, le champ peut être null, mais on doit pouvoir empècher cela.
 
Enfin, ça c'est dans la norme, reste à vérifier que MySQL la respecte.

Reply

Marsh Posté le 06-07-2004 à 18:57:47   

Reply

Marsh Posté le 06-07-2004 à 20:34:38    

La clause "on delete" représente un trigger qui va être écrit en même temps que ta PK.
 
Le "CASCADE" va supprimer toutes les filles de la table A qui pointent sur la ligne de la table B que tu supprime.
 
Le "SET NULL" va conserver les filles, mais remplacer la valeur de la PK par NULL.
 
NO ACTION : Ben... Je te laisse deviner... Y'a pas de contrôle sur la FK.
 
RESTRICT, je sais pas. A mon avis ca te fait planter si tu détruit une mère qui a encore des filles.

Reply

Marsh Posté le 06-07-2004 à 21:39:29    

2.5/4 pour arjuna  
 
NO ACTION: interdit l'effacement d'une clef si elle est utilisée dans la table
 
RESTRICT: pareil sauf que cette fois, le traitement ne peut pas être déféré

Reply

Marsh Posté le 07-07-2004 à 00:45:28    

ha bon ?

Reply

Marsh Posté le 07-07-2004 à 08:32:26    

merci !

Reply

Marsh Posté le 07-07-2004 à 09:28:48    

en fait je viens de trouver sur le net comment faire pour q une foreign key puisse etre a NULL ... il faut mettre la clause MATCH. Mais j ai essayer ca marche pas (MySQL 3.23.54) c est normal??

Reply

Sujets relatifs:

Leave a Replay

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