Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа. Отсутствует индекс для ограничения 'ekdromes_ibfk_1' в ссылочной таблице 'pwlhseis' - PullRequest
0 голосов
/ 12 января 2019

У меня есть две таблицы:

create table pwlhseis(
ma int,
hmeromhnia date,
wra time,
hmer_diek date,
ae_po int,
amka_po int,
constraint foreign key (amka_po) references pelates(amka),
primary key (ma));

И

create table ekdromes(
ae int,
diarkeia int,
proorismos varchar(20),
kostos float,
timh float,
afeteria varchar(20),
hm_enarkshs date,
primary key (ae));

Тогда:

alter table ypallhloi 
  add constraint foreign key (arithmos_up) references grafeia(arithmos_g);

alter table ekdromes 
  add constraint foreign key (ae) references pwlhseis(ae_po);

Первый альтер работает хорошо, когда я пытаюсь запустить второй, я получаю ту ошибку 1822 года. В чем проблема?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Вы определили первичный ключ как pwlhseis(ma). Это то, что вы должны использовать для ссылок на внешние ключи.

Лично я называю первичные и внешние ключи совпадающими, поэтому это будет выглядеть так:

create table pwlhseis (
    pwlhseis_id int primary key,
    . . .
);

create table ekdromes (
    ekdromes_id int primary key,
    . . .
    pwlhseis_id int,
);

alter table ekdromes 
  add constraint fk_ekdromes_pwlhseis foreign key (pwlhseis_id) references pwlhseis(pwlhseis_id);
0 голосов
/ 12 января 2019

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

Это означает:

  • Это либо первичный ключ таблицы (это не так), либо
  • У него есть дополнительное уникальное ограничение.

Если вы хотите попробовать второй вариант, вы можете запустить:

alter table pwlhseis add constraint uq1 unique (ae_po);

Затем вы можете попробовать добавить внешний ключ снова.

...