#mysql
Вопрос:
Я столкнулся с кодом ошибки 1215: «не удается добавить ограничения внешнего ключа» при создании таблицы, я попробовал следующие методы, все они потерпели неудачу
- проверьте, имеют ли два переменных в разных таблицах один и тот же тип
- установите EIGINE в InnoDB и установите все ту же КОДИРОВКУ
- проверьте, не пытаетесь ли вы ссылаться на переменные, которые не
key
имеют илиunique
SET FOREIGN_KEY_CHECKS = 0;
чтобы отключить проверку.- орфографическая ошибка
Я также использую SHOW ENGINE INNODB STATUS;
попытку найти какое-то сообщение об ошибке, но это просто «не удается добавить ограничения внешнего ключа».Я новичок в sql, поэтому я действительно не знаю, что я делаю не так.Может ли кто-нибудь помочь или указать причину ошибки?
Это мой sql-код
CREATE TABLE book(
book_id char (50),
book_title char (50),
PRIMARY KEY (book_title)
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
CREATE TABLE customer(
book_title char (50) ,
customer_id char (50),
PRIMARY KEY (customer_id),
foreign key (book_title) references book
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
Комментарии:
1. Пожалуйста, сделайте полное сообщение об ошибке — клиент (ошибка: 150 «Ограничение внешнего ключа сформировано неправильно»). Довольно простой ответ, в
book
ссылке необходимо указать, в каком столбце книги. например, fldde . Также обратите внимание на использованиеbook_id
в качествеint
типа, а не заголовка, являющегося ПК.2. В руководствах по чтению, таких как руководство по FK и MySQL MariaDB , на самом деле есть приличное описание и примеры.
3. о, спасибо@danblack
Ответ №1:
Пожалуйста, создайте дочернюю таблицу, как показано ниже, так как отсутствует ссылочный столбец родительской таблицы:
CREATE OR REPLACE TABLE customer(
book_id int unsigned not null,
customer_id char (50),
PRIMARY KEY (customer_id),
foreign key (book_id) references book (book_id)
) ENGINE = InnoDB DEFAULT CHARSET = latin1;