Mysql
 sql >> Database >  >> RDS >> Mysql

Perché devo usare la chiave esterna se posso usare WHERE?

Non è strettamente necessario per la query, è vero. Esiste per diversi motivi:

  1. Come vincolo sul tavolo per impedirti di inserire qualcosa che non punta a nulla;
  2. Come indizio per l'ottimizzatore; e
  3. Per ragioni storiche dove ce n'era più bisogno.

(1) è probabilmente quello importante dei tre. Questo si chiama integrità referenziale . Significa che se c'è un valore in una chiave esterna, ci sarà un record corrispondente con quel valore come chiave primaria nella tabella padre.

Detto questo, non tutti i database supportano l'integrità referenziale (ad es. tabelle MySQL/MyISAM) e quelli che non la applicano necessariamente (per motivi di prestazioni).