information sur les foreign keys - nom interne - SQL/NoSQL - Programmation
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 !
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
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
Faut qu'il définisse la structure de la table.
EDIT: et c'est pas truncate mais drop.
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
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?
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.
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.
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é
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??
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 ...