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

Как объясняется здесь, кажется, что ограничение внешнего ключа должно быть удалено именем ограничения, а не именем индекса, Синтаксис:

alter table footable drop foreign key fooconstraint
313
ответ дан 08 мая '09 в 8:54
источник

Внешние ключи предназначены для обеспечения целостности данных, поэтому вы не можете удалить столбец, пока он является частью внешнего ключа. Сначала нужно отбросить ключ.

Я бы подумал, что следующий запрос будет делать это:

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
19
ответ дан 08 мая '09 в 8:50
источник

Как сказано выше, вы можете легко удалить 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
6
ответ дан 03 янв. '16 в 11:42
источник

Проверьте, что имя 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;

Надеюсь, это поможет!

3
ответ дан 22 янв. '17 в 6:26
источник

Здесь можно отключить ограничение внешнего ключа, оно будет работать. ALTER TABLE location. location_id DROP FOREIGN KEY location_ibfk_1;

3
ответ дан 05 мая '14 в 13:10
источник

Обычно вы получаете эту ошибку, если ваши таблицы используют движок 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

1
ответ дан 09 авг. '17 в 13:20
источник

Вы не можете удалить столбец внешнего ключа, потому что он ссылается на таблицу assignmentStuff. Поэтому сначала нужно сбросить ограничение внешнего ключа assignmentStuff.assignmentIDX.

Аналогичный вопрос уже задан здесь. Также проверьте здесь для получения дополнительной информации.

0
ответ дан 08 мая '09 в 8:49
источник