Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum muss ich einen Fremdschlüssel verwenden, wenn ich WHERE verwenden kann?

Es ist nicht unbedingt für die Abfrage erforderlich, es ist wahr. Es existiert aus mehreren Gründen:

  1. Als Einschränkung der Tabelle, um Sie daran zu hindern, etwas einzufügen, das auf nichts zeigt;
  2. Als Hinweis für den Optimierer; und
  3. Aus historischen Gründen, wo mehr benötigt wurde.

(1) ist wahrscheinlich der wichtigste der drei. Dies wird referentielle Integrität genannt . Das bedeutet, dass es einen entsprechenden Datensatz mit diesem Wert als Primärschlüssel in der übergeordneten Tabelle gibt, wenn es einen Wert in einem Fremdschlüssel gibt.

Davon abgesehen unterstützen nicht alle Datenbanken die referentielle Integrität (zB MySQL/MyISAM-Tabellen) und diejenigen, die sie nicht unbedingt erzwingen (aus Leistungsgründen).