Ошибка MySQL не может добавить ограничение внешнего ключа
что не так?
mysql> create table price(
-> p_code char(1) not null,
-> p_description varchar(20),
-> p_rentfee decimal(2,2) not null,
-> p_dylatefee decimal(2,2));
Query OK, 0 rows affected (0.18 sec)
mysql> create table movie(
-> mv_no char(4) not null,
-> mv_name varchar(50) not null,
-> mv_year char(4) not null,
-> mv_cost decimal(2,2) not null,
-> mv_genre varchar(15) not null,
-> p_code char(1) not null,
-> foreign key (p_code) references price(p_code));
ERROR 1215 (HY000): Cannot add foreign key constraint
mysql>
Ответы
Ответ 1
price.p_code
не является основным ключом для price
. Попробуйте:
create table price(
p_code char(1) not null PRIMARY KEY,
p_description varchar(20),
p_rentfee decimal(2,2) not null,
p_dylatefee decimal(2,2));
В общем, внешние ключи должны ссылаться на первичный/уникальный ключ, весь первичный/уникальный ключ и ничего, кроме первичного/уникального ключа.
В некоторых СУБД, например SQL Server, вы можете ссылаться на столбец с уникальным индексом (не ключевым) (см. мы можем иметь внешний ключ, который не является первичным ключом в любая другая таблица?), но это нестандартное поведение.
Ответ 2
p_code
должен быть основным ключом в вашей таблице price
:
create table price(
-> p_code char(1) not null,
-> p_description varchar(20),
-> p_rentfee decimal(2,2) not null,
-> p_dylatefee decimal(2,2),
-> PRIMARY KEY ( p_code ));
Ответ 3
- Двигатель должен быть таким же, например. InnoDB
- Тип данных должен совпадать с той же длиной. например УАКСНАК (20)
- Collation Колонка символов должна быть одинаковой. например utf8
Watchout: Даже если ваши таблицы имеют одинаковое значение Collation, столбцы могут быть разными.
- Уникальный. Внешний ключ должен ссылаться на поле, которое является уникальным (обычно закрытым ключом) в справочной таблице.
Ответ 4
установите ключ p_code, либо установите его как уникальный ключ или первичный ключ.
Ответ 5
- Обозначенный столбец
price.p_code
должен быть уникальным (необходимо создать первичный или уникальный ключ).
- Обе таблицы должны быть InnoDb, используйте
ENGINE = INNODB
в CREATE TABLE
.
Ответ 6
Тип данных для дочернего столбца должен точно соответствовать родительскому столбцу. Например, поскольку price.p_code является char (1), movie.p_code также должен быть char (1), а price.p_code должен быть Первичным ключом или создавать индекс.