У меня есть внешний ключ, который ссылается на два столбца в дочерней таблице. 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 должно быть быстрым.
Ответ на этот вопрос касался не первичных ключей. Я должен был остановить свою программу от доступа к таблице, чтобы внести в нее изменения. В mySQL db вы можете добавлять таблицы и добавлять столбцы в любое время, но если вы хотите изменить столбец или удалить столбец, он не должен использоваться какой-либо программой или он будет зависать бесконечно.
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;
И это сработало. Большое спасибо мистер Карвин