Ecco una selezione che crea completa drop e creare istruzioni per tutti i rapporti su un tavolo Non automatica in alcun modo, ma abbastanza facile da copiare/incollare da ..
SELECT `DROP`,`CREATE` FROM (
SELECT
CONCAT("ALTER TABLE `", `K`.`TABLE_NAME`, "` DROP FOREIGN KEY `", `K`.`CONSTRAINT_NAME`, "`;") "DROP",
CONCAT("ALTER TABLE `",
`K`.`TABLE_NAME`,
"` ADD CONSTRAINT ",
"`fk_",
`K`.`TABLE_NAME`,
"_",
`K`.`REFERENCED_TABLE_NAME`,
"1",
"` FOREIGN KEY (`",
`K`.`COLUMN_NAME`,
"`) REFERENCES ",
"`",
`K`.`REFERENCED_TABLE_SCHEMA`,
"`.`",
`K`.`REFERENCED_TABLE_NAME`,
"` (`",
`K`.`REFERENCED_COLUMN_NAME`,
"`) ON DELETE ",
`C`.`DELETE_RULE`,
" ON UPDATE ",
`C`.`UPDATE_RULE`,
";") "CREATE"
FROM `information_schema`.`KEY_COLUMN_USAGE` `K`
LEFT JOIN `information_schema`.`REFERENTIAL_CONSTRAINTS` `C` USING (`CONSTRAINT_NAME`)
WHERE `K`.`REFERENCED_TABLE_SCHEMA` = "your_db"
AND `K`.`REFERENCED_TABLE_NAME` = "your_table") AS DropCreateConstraints
ho usato per eliminare tutti i rapporti, modificare i tipi di dati sui tasti e quindi ripristinare i rapporti con i nomi di chiave esterna alla MySQL Workbench. Potrebbe essere utile a qualcuno ..
Per me errore ottenendo come 'Impossibile eliminare o aggiornare una riga padre: un vincolo di chiave esterna fails'. Ho provato a creare ogni riga quindi solo per una riga ottenendo un errore, altri eliminati. – Pramod
"Sicuramente" difficilmente. Nel mondo reale le tabelle sono spesso troppo grandi perché ciò sia fattibile. Non c'è un modo per manipolare gli indici senza ricreare l'intera tabella? (Sì: vedi l'eccellente soluzione di Dandalf!) –