У меня есть таблица, первичный ключ которой используется в нескольких других таблицах и имеет несколько внешних ключей для других таблиц.
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): ошибка при переименовании
Как я могу удалить столбец в таблице присваивания, не получив эту ошибку?
Ответ 1
Как объясняется здесь, кажется, что ограничение внешнего ключа должно быть удалено именем ограничения, а не именем индекса, Синтаксис:
alter table footable drop foreign key fooconstraint
Ответ 2
Внешние ключи предназначены для обеспечения целостности данных, поэтому вы не можете удалить столбец, пока он является частью внешнего ключа. Сначала нужно отбросить ключ.
Я бы подумал, что следующий запрос будет делать это:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
Ответ 3
Как сказано выше, вы можете легко удалить 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
Ответ 4
Проверьте, что имя CONSTRAINT и имя FOREIGN KEY:
SHOW CREATE TABLE table_name;
Удалите имя CONSTRAINT и имя FOREIGN KEY:
ALTER TABLE table_name
DROP FOREIGN KEY the_name_after_CONSTRAINT,
DROP KEY the_name_after_FOREIGN_KEY;
Надеюсь, это поможет!
Ответ 5
Здесь можно отключить ограничение внешнего ключа, оно будет работать.
ALTER TABLE location
. location_id
DROP FOREIGN KEY location_ibfk_1
;
Ответ 6
Обычно вы получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется отказаться от внешнего ключа, а затем сделать таблицу alter и отбросить столбец.
Но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам нужно будет найти имя, используемое для его индексации. Чтобы найти это, выполните следующие действия:
ПОКАЗАТЬ СОЗДАТЬ ТАБЛИЦУ область;
Это должно показать вам строку, в левом верхнем углу нажмите кнопку +, нажмите кнопку полного текста raio, затем нажмите кнопку go. Там вы получите имя индекса, что-то вроде этого:
CONSTRAINT region_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (country_id) ССЫЛКИ страна (id) ВКЛ УДАЛИТЬ НЕТ ДЕЙСТВИЙ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЙ
Теперь просто выполните:
изменить область изменения области таблицы в регистре region_ibfk_1;
или
проще просто введите: -
alter table TableName drop foreign key TableName_ibfk_1;
Помните, что единственное, что нужно добавить _ibfk_1 после вашего имени табуляции, сделать следующее: - TableName _ibfk_1
Ответ 7
Вы не можете удалить столбец внешнего ключа, потому что он ссылается на таблицу assignmentStuff
. Поэтому сначала нужно сбросить ограничение внешнего ключа assignmentStuff.assignmentIDX
.
Аналогичный вопрос уже задан здесь. Также проверьте здесь для получения дополнительной информации.
Ответ 8
Попробуйте следующее:
alter table Documents drop
FK__Documents__Custo__2A4B4B5E
Ответ 9
Шаг1: show create table vendor_locations;
Шаг2: ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
это сработало для меня.
Ответ 10
Эй, я следовал некоторой последовательности выше,
и нашел какое-то решение.
SHOW CREATE TABLE footable;
Вы получите FK Constrain Name, например,
ProjectsInfo_ibfk_1
Теперь вам нужно снять эти ограничения. изменить таблицу commantd
alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;
Затем опустите столбец таблицы,
alter table ProjectsInfo drop column clientId;