Вопрос:
Я пытаюсь добавить внешний ключ к моей таблице расписания полетов, но он терпит неудачу, но я действительно не знаю, почему. Внешний ключ должен ссылаться на атрибут 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.