Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1680 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  information sur les foreign keys - nom interne

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

information sur les foreign keys - nom interne

n°787767
Profil sup​primé
Posté le 06-07-2004 à 10:30:07  answer
 

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 ...

mood
Publicité
Posté le 06-07-2004 à 10:30:07  profilanswer
 

n°787793
Profil sup​primé
Posté le 06-07-2004 à 10:44:03  answer
 

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

n°787896
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-07-2004 à 11:47:37  profilanswer
 

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
n°787967
gizmo
Posté le 06-07-2004 à 13:00:33  profilanswer
 

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
n°787988
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-07-2004 à 13:13:55  profilanswer
 

truncate est plus rapide.

n°787997
gizmo
Posté le 06-07-2004 à 13:24:26  profilanswer
 

Arjuna a écrit :

truncate est plus rapide.


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

n°788052
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-07-2004 à 14:11:13  profilanswer
 

ça détruit pas la table ? je croyais

n°788355
Beegee
Posté le 06-07-2004 à 17:41:33  profilanswer
 

faut faire un DROP ...

n°788422
Profil sup​primé
Posté le 06-07-2004 à 18:47:44  answer
 

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?

n°788435
gizmo
Posté le 06-07-2004 à 18:57:47  profilanswer
 

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.

mood
Publicité
Posté le 06-07-2004 à 18:57:47  profilanswer
 

n°788517
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-07-2004 à 20:34:38  profilanswer
 

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.

n°788537
gizmo
Posté le 06-07-2004 à 21:39:29  profilanswer
 

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é

n°788669
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-07-2004 à 00:45:28  profilanswer
 

ha bon ?

n°788718
Profil sup​primé
Posté le 07-07-2004 à 08:32:26  answer
 

merci !

n°788751
Profil sup​primé
Posté le 07-07-2004 à 09:28:48  answer
 

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??


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  information sur les foreign keys - nom interne

 

Sujets relatifs
Information dans la statusBar de IEQuel langage utilsé pour afficher un planning sur un réseau tv interne
création d'un moteur de recherche interneerreur Oracle ORA-00600: code erreur interne, arguments
Lien interne a une tableWarning: Cannot modify header information
lien interneAvis sur un code (classe interne inside)
[SQL][Compris]foreign keyProblème avec les 'keys' d'un map de la STL
Plus de sujets relatifs à : information sur les foreign keys - nom interne


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR