/ / Simbolo del vincolo rispetto al nome dell'indice della chiave esterna -> qual è la differenza? - mysql

Simbolo di vincolo vs nome indice chiave esterna -> qual è la differenza? - mysql

In mysql le chiavi esterne sono definite in questo modo:

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

Perché abbiamo bisogno di CONSTRAINT e di simbolo? Sembra che ci sia comunque index_name, quindi non capisco assolutamente il motivo della parola chiave CONSTRAINT. Qualcuno può chiarire a cosa serve?

risposte:

5 per risposta № 1

CONSTRAINT è la parola chiave che dice a MySQL che desideri aggiungere un vincolo. [symbol] è un nome facoltativo per il vincolo. Puoi chiamarlo come preferisci. Se ometti il ​​nome, MySQL genererà un nome per conto proprio, internamente.

È bello usare il fk prefisso come fk_something.

Avrai bisogno di quel nome di simbolo quando rilasci il vincolo:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_something;

È possibile ottenere il nome del simbolo usando SHOW CREATE TABLE:

SHOW CREATE TABLE tbl_name;

Non è possibile utilizzare un nome di indice per fare riferimento a un vincolo. Qualsiasi indice che può essere aggiunto al momento del rilascio CONSTRAINT la clausola può essere automaticamente rimossa in un secondo momento (ad es. se viene aggiunto esplicitamente un indice che servirà al suo posto).

Tutto ciò viene esaudito in modo più dettagliato nel Documentazione MySQL.


0 per risposta № 2

Dal documento di riferimento MySQL

index_name rappresenta un ID di chiave esterna. Se dato, questo viene ignorato se un indice per la chiave esterna è definito esplicitamente. Altrimenti, se MySQL crea un indice per la chiave esterna, usa index_name per il nome dell'indice