répondis-je une autre question similaire (Is it possible to drop all foreign key constraints on a table at once in mySQL 5?), mais pensé qu'il pourrait être utile d'inclure la réponse ici.
Cette solution est purement mysql en créant une procédure pour faire une boucle sur les contraintes de la table et les déposer une à la fois.
DROP PROCEDURE IF EXISTS dropForeignKeysFromTable;
delimiter ///
create procedure dropForeignKeysFromTable(IN param_table_schema varchar(255), IN param_table_name varchar(255))
begin
declare done int default FALSE;
declare dropCommand varchar(255);
declare dropCur cursor for
select concat('alter table ',table_schema,'.',table_name,' DROP FOREIGN KEY ',constraint_name, ';')
from information_schema.table_constraints
where constraint_type='FOREIGN KEY'
and table_name = param_table_name
and table_schema = param_table_schema;
declare continue handler for not found set done = true;
open dropCur;
read_loop: loop
fetch dropCur into dropCommand;
if done then
leave read_loop;
end if;
set @sdropCommand = dropCommand;
prepare dropClientUpdateKeyStmt from @sdropCommand;
execute dropClientUpdateKeyStmt;
deallocate prepare dropClientUpdateKeyStmt;
end loop;
close dropCur;
end///
delimiter ;
Pour utiliser la procédure sur l'un de vos tables il suffit d'utiliser les éléments suivants, en remplacement table_schema et nom_de_table vos valeurs:
call dropForeignKeysFromTable('table_schema', 'table_name');
Est-ce que cette approche fonctionne toujours? ou pourriez-vous éventuellement rencontrer des clés étrangères qui dépendent des autres? Juste essayé cette approche dans Groovy contre une base de données MySQL et a rencontré une erreur en disant que ma syntaxe était erronée. très étrange. – BuddyJoe
@tyndall: Si l'erreur indique que votre syntaxe est incorrecte, cela signifie que la base de données n'a même pas encore tenté d'effectuer une opération. Votre meilleur pari est de corriger l'erreur de syntaxe en premier. –
Je ne sais toujours pas quel était le problème ... J'ai été capable de prendre une ligne à la fois et de l'exécuter sur la base de données. Mais la liste complète avec des points-virgules comme des fins de ligne ne fonctionnerait pas. Et je n'ai pas pu les exécuter dans l'ordre qui sort de la requête information_schema.key_column_usage. Fera d'autres recherches pour voir s'il y a des clés étrangères dépendantes ce week-end. Je vais recréer la base de données et réessayer. – BuddyJoe