Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа. Отсутствует индекс для ограничения «employee_ibfk_1» в ссылочной таблице «Адрес» - PullRequest
0 голосов
/ 19 апреля 2019

Созданы две таблицы, а именно Address и Employee.With отношения сотрудник имеет адрес.Сценарий БД, как показано ниже.

create table address(addressid int,city varchar(10),pincode varchar(10));

insert into address(addressid,city,pincode) values(201,'Hosur',635109);

create table employee(empid int , firstname varchar(20),lastname varchar(20),department varchar(10),emailAddress varchar(50),baseLocation varchar(20),address int,FOREIGN KEY (Address) REFERENCES Address(addressId));

Но я получаю следующую ошибку при попытке создать таблицу сотрудников:

Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа.Отсутствует индекс для ограничения «employee_ibfk_1» в ссылочной таблице «Адрес» 0,117 сек

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

потому что внешний ключ ссылается на первичный ключ. у вас нет первичного ключа в адресе таблицы.

вот так,

create table address(addressid int primary key,city varchar(10),pincode varchar(10));

create table employee(empid int , firstname varchar(20),lastname varchar(20),department varchar(10),emailAddress varchar(50),baseLocation varchar(20),address int ,FOREIGN KEY (address) REFERENCES address(addressid));

insert into address(addressid,city,pincode) values(201,'Hosur',635109);
1 голос
/ 19 апреля 2019

Необходимо добавить ограничение первичного ключа в таблицу адресов, чтобы добавить ссылки на внешний ключ в таблицу сотрудников

, попробуйте следующий код:

create table address(addressid int primary key not null,city varchar(10),pincode varchar(10));

insert into address(addressid,city,pincode) values(201,'Hosur',635109);

create table employee(empid int , firstname varchar(20),lastname varchar(20),department varchar(10),emailAddress varchar(50),baseLocation varchar(20),address int,FOREIGN KEY  (address) REFERENCES address(addressid));
1 голос
/ 19 апреля 2019

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

create table address(addressId int primary key not null, city varchar(10), pincode varchar(10));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...