Полагаю, вы уже нашли решение, так как этому посту уже шесть месяцев, но недавно мне пришлось придумать сценарий для удаления ограничений внешнего ключа для конкретной таблицы в MySQL, чтобы это могло помочь любомута же самая лодка:
# create a handy dandy stored procedure
DELIMITER $$
CREATE PROCEDURE DropConstraints(refschema VARCHAR(64), reftable VARCHAR(64), refcolumn VARCHAR(64))
BEGIN
WHILE EXISTS(
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE 1
AND REFERENCED_TABLE_SCHEMA = refschema
AND REFERENCED_TABLE_NAME = reftable
AND REFERENCED_COLUMN_NAME = refcolumn
) DO
BEGIN
SET @sqlstmt = (
SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME)
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE 1
AND REFERENCED_TABLE_SCHEMA = refschema
AND REFERENCED_TABLE_NAME = reftable
AND REFERENCED_COLUMN_NAME = refcolumn
LIMIT 1
);
PREPARE stmt1 FROM @sqlstmt;
EXECUTE stmt1;
END;
END WHILE;
END$$
DELIMITER ;
Чтобы запустить ее, просто используйте:
SET @schema = 'schema_name';
CALL DropConstraints(@schema, 'TableName', 'Referenced_Column_1');
CALL DropConstraints(@schema, 'TableName', 'Referenced_Column_2');
А если вы не хотите продолжать процедуру:* Конечно, если вы хотите удалить все ограничения FK в таблицу, вы можете удалить параметр refcolumn и последнюю строку каждого предложения where.