MySQL Удаление некоторых внешних ключей - программирование

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): ошибка при переименовании

Как я могу удалить столбец в таблице присваивания, не получив эту ошибку?

4b9b3361

Ответ 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;