Bonjour,
avec MySQL 5.0, pouvez me confirmer que l'utilisation d'une clé étrangère dans une table implique obligatoirement la création d'un index sur la colonne (champ)?
Avec MS SQL Server, il ne me semblait pas que c'était le cas.
Merci d'avance
Bonjour,
avec MySQL 5.0, pouvez me confirmer que l'utilisation d'une clé étrangère dans une table implique obligatoirement la création d'un index sur la colonne (champ)?
Avec MS SQL Server, il ne me semblait pas que c'était le cas.
Merci d'avance
Oui je confirme j'ai été contraint de le faire =)
Il me semble que ça soit obligatoire.Envoyé par AdHoc
Ne jamais comparer les fonctionnalités entre SGPBD tu risques de te tromper à plus de 50%.
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
Une recherche sur le forum aurait apporté cette confirmation....
http://dev.mysql.com/doc/refman/5.0/...nstraints.html
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
Merci à tous de cette confirmation, j'en avais besoin.
Comme je fais des tests simultanés sur les différents environnements (SQL Server et MySQL), cette contrainte m'a vraiment surpris et, en fait, je ne la comprenais pas (ou ne voulais pas?).
Pour qi130, effectivement c'est même les premières lignes
On n'a pas idée de mettre ça à sa place ,15.7.4. Contraintes de clés étrangères FOREIGN KEY
Depuis la version 3.23.43b, InnoDB respecte les contraintes de clé étrangères.
La syntaxe des définitions de contraintes de clés étrangères de InnoDB est la suivante :
[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}]
Les deux tables doivent être de type InnoDB, dans la table, il doit y avoir un INDEX où les clés étrangères sont listées comme première colonne, dans le même ordre, et dans la table référencée, il doit y avoir un INDEX où les colonnes référencées sont listées comme premières colonnes, dans le même ordre. Les préfixes d'index ne sont pas supportés pour les clés de contrainte.
InnoDB ne crée pas automatiquement les index nécessaires pour les clés étrangères : vous devez les créer vous-même. Les index sont nécessaires pour accélérer les vérifications de contrainte, et éviter un scan de table.
j'ai lu 5,6 fois ce chapitre en zappant systématiquement ces lignes
Pour berceker united, je vais essayer de m'en souvenir et d'en tenir compte (c'est pas gagné !!!).
Je pense que si c'est une bonne idée. Ceci permet d'optimiser le moteur de recherche sur les index plutôt que de parcourir toute une table afin de cherche la bonne valeur de référence. Il va chercher les informations dans la table des index.Envoyé par AdHoc
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
oui, du coup, maintenant je crée systématiquement des index sur mes clés étrangères quelque soit le SGBD.
Ca mange un peu de pain, mais le passage de l'un à l'autre se fait presque tout seul.
T'inquiète pas je m'étais fais avoir aussi il y a longtemps mais maintenant je pars du principe que mysql étant différent sur la manière de travail. J'ai décidé de la faire en total indépendance c'est à dire qu'entre Mysql et SqlServer ils peuvent avoir des structures très différentes. La couche metier de l'application reste la même. C'est trop un casse-tête de faire des requêtes fonctionnant sur différent sgbd.
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager