MySQL: come controllare le chiavi esterne relative a una tabella


43

Come visualizzare le chiavi esterne relative a una tabella in MySql?

Contesto : volevo eliminare una tabella in MySql che ha un vincolo di chiave esterna. Quando lo faccio ottengo questo:

Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails

Come posso rilasciare le chiavi esterne relative alla tabella lasciando gli altri.

Risposte:


55

Innanzitutto, scopri il FOREIGN KEYnome del tuo vincolo in questo modo:

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'My_Table';

Quindi puoi rimuovere il vincolo denominato nel modo seguente:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Riferimenti: 1 e 2 .

Come suggerito da @SteffenWinkler nei commenti, se esiste più di una tabella con quel nome in diversi schemi / database, è possibile aggiungere un ulteriore predicato alla clausola where:

AND TABLE_SCHEMA = 'My_Database';

1
Grazie per la modifica - Ricambierò + 1 alla tua domanda! :-)
Vérace,

16
Inoltre, SHOW CREATE TABLE My_Table;.
Rick James,

2
@RickJames che mostra solo i vincoli su altre tabelle che My_Tableha. La domanda richiede vincoli su My_Tablealtre tabelle.
ADTC,

2
solo per le persone che guardano solo questo: quella dichiarazione elencherà tutti i vincoli che fanno riferimento a una tabella con il nome specificato nell'intero server di database. Limitalo al database pertinente aggiungendoAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler il

3

Modificata la query sopra. Il nome della tabella di riferimento modificato è cambiato in Nome tabella come Nome di tabella di riferimento è la tabella a cui si fa riferimento e quindi il risultato della query originale non mostrerà le chiavi esterne sulla tabella.

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  Table_name = 'case_qualitycontrolcase' and constraint_name = f
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.