MySQL удаление некоторых внешних ключей
У меня есть таблица, первичный ключ которой используется в нескольких других таблиц и имеет несколько внешних ключей в других таблицах.
CREATE TABLE location (
locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
...
) ENGINE = InnoDB;
CREATE TABLE assignment (
assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
locationID INT NOT NULL,
FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
...
) ENGINE = InnoDB;
CREATE TABLE assignmentStuff (
...
assignmentID INT NOT NULL,
FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
проблема в том, что когда я пытаюсь удалить один из столбцов внешнего ключа (т. е. locationIDX), это дает мне ошибку.
"ошибка 1025 (HY000): ошибка при переименовании"
Как я могу удалить столбец в таблице назначения выше без получения этой ошибки?
9 ответов
Как пояснил здесь, кажется, ограничение внешнего ключа должно быть отброшено как имя ограничения и не имя индекса. Синтаксис:
alter table footable drop foreign key fooconstraint
внешние ключи для обеспечения целостности данных, поэтому вы не можете сбросить столбец, если он является частью внешнего ключа. Сначала вы должны уронить ключ.
Я бы подумал, что следующий запрос сделает это:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
как все сказали выше, вы можете легко удалить FK. Однако я только что заметил, что в какой-то момент может потребоваться отбросить сам ключ. Если у вас есть сообщение об ошибке для создания другого индекса, подобного последнему, я имею в виду с тем же именем, было бы полезно удалить все, что связано с этим индексом.
ALTER TABLE your_table_with_fk
drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result,
drop KEY the_same_name_as_above
Проверьте имя ограничения и имя внешнего ключа:
SHOW CREATE TABLE table_name;
удалите как имя ограничения, так и имя внешнего ключа:
ALTER TABLE table_name
DROP FOREIGN KEY the_name_after_CONSTRAINT,
DROP KEY the_name_after_FOREIGN_KEY;
надеюсь, что это помогает!
вот способ отбросить ограничение внешнего ключа, он будет работать.
ИЗМЕНЕНИЕ ТАБЛИЦЫ location
.location_id
DROP FOREIGN KEY location_ibfk_1
;
вы обычно получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется удалить внешний ключ, а затем выполнить alter table и удалить столбец.
но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам придется найти имя, используемое для его индексирования. Чтобы найти это, выполните следующий выбор:
показать создать область таблицы; Это должно показать вам строку ,в левом верхнем углу нажмите кнопку+, то нажмите кнопку полный текст raio и нажмите кнопку go .там вы получите название индекса, что-то вроде этого:
ограничение region_ibfk_1 внешний ключ (country_id) ссылки на страну (id) при удалении нет действия при обновлении нет действия Теперь просто вопрос:
alter TABLE region drop внешний ключ region_ibfk_1;
или
больше просто тип:- ALTER table TableName drop внешний ключ TableName_ibfk_1;
помните, что единственное, что нужно добавить _ibfk_1 после вашего tablename сделать так: - TableName_ibfk_1
вы не можете удалить столбец внешнего ключа, потому что на него ссылаются из таблицы assignmentStuff
. Таким образом, вы должны сначала удалить ограничение внешнего ключа assignmentStuff.assignmentIDX
.
подобный вопрос уже был задан здесь. Проверьте также здесь для получения дополнительной информации.
Шаг 1: show create table vendor_locations;
Шаг 2: ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
это сработало для меня.