Domanda

Come vedere le chiavi straniere relative a una tabella in mysql?

Background : Volevo cadere un tavolo in MySQL che ha un vincolo di chiave straniero.Quando lo faccio, ottengo questo:

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

.

Come posso far cadere le chiavi straniere relative alla tabella lasciando altri.

È stato utile?

Soluzione

Innanzitutto, scopri il tuo nome del vincolo FOREIGN KEY 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';
.

È inoltre possibile aggiungere (alla clausola WHERE) se si dispone di più di una tabella chiamata My_Table in diversi schemi.

AND TABLE_SCHEMA = 'My_Database';
.

E quindi è possibile rimuovere il vincolo denominato nel seguente modo:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;
.

Riferimenti: 1 & 2 .

Altri suggerimenti

Edificato la query sopra.Il nome della tabella di riferimento modificato sul nome della tabella come nome della tabella di riferimento è la tabella che viene referenziata e quindi il risultato della query originale non ti mostrerà i tasti estranei 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
.

in mysql 5.7.Puoi trovare le relazioni per la tabella e le regole relazionali.

SELECT
  DISTINCT a.TABLE_NAME,
  a.CONSTRAINT_NAME,
  b.DELETE_RULE,
  b.UPDATE_RULE,
  a.REFERENCED_TABLE_NAME,
  a.COLUMN_NAME,
  a.REFERENCED_COLUMN_NAME,
  a.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b USING (CONSTRAINT_NAME)
WHERE
    a.TABLE_SCHEMA = "DATABASE_NAME" AND
    a.REFERENCED_TABLE_NAME = 'TABLE_NAME'
ORDER BY a.TABLE_NAME ASC;
.

È possibile eseguire direttamente l'output di questa query per far cadere il vincolo della tabella di riferimento.



select concat('ALTER TABLE ' ,CONSTRAINT_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
from  information_schema.REFERENTIAL_CONSTRAINTS  
where REFERENCED_TABLE_NAME='<<table to be dropped >> ';


.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top