Как удалить ВСЕ внешние ключи в mysql - PullRequest
0 голосов
/ 11 марта 2020

Существует ли какая-нибудь системная таблица, из которой я могу удалить записи, содержащие ограничения внешнего ключа, определенные в базе данных?

Я взял все FK из разных клонов баз данных и просто хочу синхронизировать c их, а также чтобы сделать их имена непротиворечивыми.

Я знаю INFORMATION_SCHEMA, но я думаю, что это только для чтения, как отмечено в документации

Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью оператора USE, вы можете только читать содержимое таблиц, но не выполнять над ними операции INSERT, UPDATE или DELETE.

И я знаю, что могу сделать запрос, который просто использовал бы информационную схему, чтобы выложить сценарий, но я бы предпочел избежать этого шага, так как я не смогу выполнить его в Liquibase. скрипт, который применяется к разным экземплярам.

Ответы [ 3 ]

0 голосов
/ 11 марта 2020

Извините, вы не можете добавлять или удалять ограничения внешнего ключа без использования ALTER TABLE.

0 голосов
/ 11 марта 2020

В MySQL нет DROP CONSTRAINT, вместо этого вы должны использовать DROP FOREIGN KEY:

ALTER TABLE `table_name`
    DROP FOREIGN KEY `id_name_fk`;

Возможно, вам придется также удалить индекс, потому что простое удаление внешнего ключа не удаляет индекс .

ALTER TABLE `table_name` 
    DROP INDEX  `id_name_fk`;

Альтернатива для временного отключения всех внешних ключей: SET FOREIGN_KEY_CHECKS=0;

Когда вам нужно включить его: SET FOREIGN_KEY_CHECKS=1;

0 голосов
/ 11 марта 2020

Выполнить это ...

SET foreign_key_checks = 0;
...