Ошибка MySQL 1822: не удалось добавить ограничение внешнего ключа; отсутствующий индекс для ограничения, но индекс существует

Вопрос: Я пытаюсь добавить внешний ключ к моей таблице расписания полетов, но он терпит неудачу, но я действительно не знаю, почему. Внешний ключ должен ссылаться на атрибут txtAC_tag из таблицы tblAircraft, который является частью основного ключа! Таким образом, tblAircraft индексируется (первичный ключ - это комбинированный ключ, который состоит из idAC и txtAC_tag → может ли

Вопрос:

Я пытаюсь добавить внешний ключ к моей таблице расписания полетов, но он терпит неудачу, но я действительно не знаю, почему. Внешний ключ должен ссылаться на атрибут txtAC_tag из таблицы tblAircraft, который является частью основного ключа! Таким образом, tblAircraft индексируется (первичный ключ – это комбинированный ключ, который состоит из idAC и txtAC_tag → может ли проблема с объединенным Первичным ключом?), И тип данных атрибута соответствует.

Вот мои объявления таблиц и объявления внешнего ключа:

create table if not exists tblAircrafts( idAC int not null auto_increment, txtAC_tag varchar(255) not null, txtAC_type varchar(255) not null, primary key(idAC, txtAC_tag)); create table if not exists tblFlightSchedule( ID int not null auto_increment, datDate date, txtFrom varchar(255), txtTo varchar(255), txtFlight varchar(255), numFlight_time_decimal decimal(4,2), txtAC_tag varchar(255) not null, txtAC_type varchar(255) not null, numSeatCapacity int unsigned, numLoad int unsigned, — auslastung numDirt decimal(20,19), numTotalFlightTime decimal(50,5), numCumDirt decimal(20,15), primary key(ID)); alter table tblflightschedule add foreign key(txtAC_tag) references tblaircrafts(txtAC_tag);

И вот сообщение ERROR:

Error Code: 1822. Failed to add the foreign key constaint. Missing index for constraint » in the referenced table ‘tblaircrafts’

Какие-либо предложения? Я ценю любую помощь, которую вы можете мне дать, спасибо!

Лучший ответ:

Проблема здесь:

add foreign key(txtAC_tag) references tblaircrafts(txtAC_tag);

здесь вы привязываете txtAC_tag к txtAC_tag таблицы tblaircrafts но в tblaircrafts столбец txtAC_tag является ни unique ни primary, почему он показывает ошибку.

Для отношения внешних ключей столбец родительских таблиц, на котором вы создаете отношение, должен быть unique или primary и они должны иметь одинаковый тип данных.

Чтобы устранить это, сделайте столбец txtAC_tag уникальным.

Ответ №1

Кажется, вы создали Composite Primary Key для таблицы tblAircrafts.

Если вы хотите добавить ссылку на составной ключ в таблицу tblflightschedule, вам нужно использовать следующий синтаксис:

alter table tblflightschedule add foreign key (‘int Column’, txtAC_tag) references tblaircrafts **(idAC, txtAC_tag);**

И вам нужно передать два столбца для добавления внешнего ключа (‘int Column’, txtAC_tag).

Таким образом, вы можете добавить еще один столбец в таблицу tblflightschedule или удалить один столбец из таблицы tblaircrafts.

Оцените статью
Добавить комментарий