Код ошибки MySQL 1215: не удается добавить внешние ограничения

#mysql

Вопрос:

Я столкнулся с кодом ошибки 1215: «не удается добавить ограничения внешнего ключа» при создании таблицы, я попробовал следующие методы, все они потерпели неудачу

  1. проверьте, имеют ли два переменных в разных таблицах один и тот же тип
  2. установите EIGINE в InnoDB и установите все ту же КОДИРОВКУ
  3. проверьте, не пытаетесь ли вы ссылаться на переменные, которые не key имеют или unique
  4. SET FOREIGN_KEY_CHECKS = 0; чтобы отключить проверку.
  5. орфографическая ошибка

Я также использую 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;