2011-05-13 3 views
1

J'ai récemment changé d'emploi et dans cette nouvelle société nous utilisons MySQL. Je n'ai pas d'expérience avec MySQL, bien que j'aie utilisé SQL Server et Oracle depuis plus de 4 ans maintenant. Maintenant, la chose étrange que je vois avec MySQL est qu'il ne semble pas resepect certaines des choses de base comme Foreign Key Constraints (ce qui signifie qu'une colonne est une clé antérieure mais je peux insérer n'importe quelle valeur ici si elle est présente dans l'autre table où ce FK se rapportait à). Maintenant, je sais que dans SQL Server il y a ce concept de contrainte de clé foriegn NOCHECK mais le gars de la nouvelle société responsable de MySQL db dit que ne pas respecter un FK est une chose normale dans MySQL et il n'a pas besoin de paramètres spéciaux (comme Contrainte NOCHECK FK). Je ne comprends pas que dans un système de base de données, comment pouvez-vous assurer l'intégrité du référentiel sans avoir ces vérifications de base en place. Je ne suis pas sûr que le "expert" mySQL local le connaisse bien ou que mySQL ne respecte pas vraiment les règles FK. Des pensées?contrainte de clé étrangère non respectée

Répondre

3

Vérifiez que vos tables utilisent le moteur InnoDB. Lorsque vous utilisez le moteur MyISAM (qui était la valeur par défaut jusqu'à récemment), les déclarations de clés étrangères ne sont pas appliquées.

+0

Comment puis-je vérifier cela? rappelez-vous je suis totalement nouveau à mySQL –

+0

'show create table foo;' –

2

MySQL ont différents moteurs DB -

  • MyISAM - par défaut, aucun support FK
  • InnoDB - avoir le soutien FK - mais pas la recherche plein texte comme dans MyISAM

Sur les deux moteurs vous pouvez créer une table et essayer de créer FK, mais MyISAM l'ignorera simplement.

0

Assurez-vous également que les clés étrangères sont appliquées. Pour une raison quelconque, ils n'étaient pas sur le mien, conduisant à une semaine de maux de tête!

Vérifier:

SELECT @@FOREIGN_KEY_CHECKS 

Set:

SET FOREIGN_KEY_CHECKS=1 
Questions connexes