Как удалить внешний ключ, который ссылается на несколько столбцов в MySQL

0

У меня есть внешний ключ, который ссылается на два столбца в дочерней таблице. Id нравится удалять внешний ключ, но mySQL просто зависает, и ничего не происходит:

Вот результат из SHOW CREATE TABLE table_name:

KEY FK_animal_index (animal_type,food_index), CONSTRAINT FK_animal_index FOREIGN KEY (animal_type, food_index) REFERENCES animal_schedules (animal_type, food_index) ENGINE=InnoDB

Я попытался удалить этот внешний ключ, используя:

'ALTER TABLE table_name DROP FOREIGN KEY FK_animal_index;'

'ALTER TABLE table_name DROP FOREIGN KEY animal_type;'

ALTER TABLE section_configuration DROP FOREIGN KEY FK_animal_index, DROP KEY (animal_type, food_index);

А ТАКЖЕ

ALTER TABLE section_configuration DROP FOREIGN KEY FK_animal_index , ADD CONSTRAINT FK_animal_type FOREIGN KEY (animal_type) REFERENCES animal_schedules ( animal_type ) ON DELETE SET NULL;

Другие отметили, что ON DELETE не устанавливается, может помешать вам изменять значения ключа (mySQL отклонит изменение, если ON DELETE не настроено ни на что)

Но безрезультатно, mySQL просто зависает, а через 30 минут все равно ничего. В настоящий момент база данных очень мала, поэтому удаление FK должно быть быстрым.

  • 0
    Я предполагаю, что он ждет доступа к столу. Если у вас есть незавершенные транзакции, запущенные в других сеансах, ALTER TABLE должен дождаться их завершения, прежде чем он сможет начать что-либо делать с таблицей. Это называется блокировкой метаданных . Любой сеанс, который запросил таблицу и оставил ее транзакцию незафиксированной, может заблокировать ALTER TABLE на неопределенный срок.
  • 1
    Да, похоже, ты прав. Я мог ВСТАВИТЬ, ОБНОВИТЬ и ВЫБРАТЬ записи, но я не мог ИЗМЕНИТЬ ТАБЛИЦУ, пока я не остановил доступ программ к базе данных. Я остановил свою программу и использовал: ALTER TABLE section_configuration DROP FOREIGN KEY FK_animal_index, ADD CONSTRAINT FK_animal_type FOREIGN KEY (animal_type) REFERENCES animal_schedules(animal_type) ON DELETE SET NULL; И это сработало. Большое спасибо мистер Карвин
Теги:
foreign-keys

1 ответ

0

Ответ на этот вопрос касался не первичных ключей. Я должен был остановить свою программу от доступа к таблице, чтобы внести в нее изменения. В mySQL db вы можете добавлять таблицы и добавлять столбцы в любое время, но если вы хотите изменить столбец или удалить столбец, он не должен использоваться какой-либо программой или он будет зависать бесконечно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню