1215 cannot add foreign key constraint

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

выполнение сценария SQL завершено: заявления: 7 удалось, 1 не удалось

вот SQL для родительских таблиц.

27 ответов

Я полагаю, что Clients.Case_Number и/или Staff.Emp_ID не совсем тот же тип данных, что и Clients_has_Staff.Clients_Case_Number и Clients_has_Staff.Staff_Emp_ID .

возможно, столбцы в родительских таблицах являются INT UNSIGNED ?

они должны быть точно такого же типа данных в обеих таблицах.

причины, по которым вы можете получить ошибку ограничения внешнего ключа:

  1. вы не используете InnoDB в качестве двигателя на всех столах.
  2. вы пытаетесь ссылаться на несуществующий ключ в целевой таблице. Убедитесь, что это ключ на другой стол (он может быть первичный или уникальный ключ)
  3. типы столбцов не совпадают (исключение-столбец в таблице ссылок может быть обнулен).
  4. если PK / FK является varchar, убедитесь параметры сортировки одинаковы для обоих.

обновление:

  1. одной из причин может быть то, что столбец используется для ON DELETE SET NULL не определяется как null. Поэтому убедитесь, что столбец имеет значение null по умолчанию.

для других такая же ошибка не всегда может быть из-за несоответствия типа столбца, вы можете узнать больше информации об ошибке ключа MySQL foriegn, выполнив команду

вы можете найти ошибку в верхней части печатного сообщения что-то вроде

Не удается найти индекс в указанной таблице, где ссылочные столбцы отображаются как первые столбцы или типы столбцов в таблице и ссылочной таблице не совпадают для ограничения.

ошибка 1215 раздражает. взрыв таблетки ответ охватывает основы. Вы должны быть уверены, что начнете оттуда. Тем не менее, есть более, гораздо более тонкие случаи, чтобы искать:

например, когда вы пытаетесь связать первичные ключи разных таблиц, обязательно укажите правильный ON UPDATE и ON DELETE параметры. Например:

не будет летать, потому что первичные ключи (например, id ) не может быть NULL .

Я уверен, что есть более того, аналогично тонкие проблемы при добавлении такого рода ограничений, поэтому при обнаружении ошибок ограничений всегда убедитесь, что ограничения и их последствия имеют смысл в вашем текущем контексте. Удачи с вашей ошибкой 1215!

в моем случае я удалил таблицу, используя SET FOREIGN_KEY_CHECKS=0 , потом SET FOREIGN_KEY_CHECKS=1 после. Когда я пошел, чтобы перезагрузить стол, я получил error 1215 . Проблема заключалась в том, что в базе данных была еще одна таблица с внешним ключом к таблице, которую я удалил и перезагружал. Часть процесса перезагрузки включала изменение типа данных для одного из полей, что сделало внешний ключ из другой таблицы недействительным, тем самым запустив error 1215 . Я решил проблему, сбросив, а затем перезагрузив другую таблицу с новым типом данных для соответствующего поля.

проверьте параметры сортировки таблицы, используя SHOW TABLE STATUS вы можете проверить информацию о таблицах, включая сверку.

обе таблицы должны иметь одинаковые параметры сортировки.

Это случилось со мной.

есть ловушка, с которой я столкнулся с «ошибкой 1215: не могу добавить ограничение внешнего ключа» при использовании Laravel 4, особенно с генераторами Laravel 4 Джеффри.

в Laravel 4 Вы можете использовать генераторы JeffreyWay для создания файлов миграции для создания таблиц один за другим, что означает, что каждый файл миграции генерирует одну таблицу. Вы должны знать, что каждый файл миграции генерируется с меткой времени в имени файла,что дает файлам порядок. Порядок генерация также является порядком операции миграции при запуске команды CLI Artisan «php artisan migrate». Таким образом, если файл запрашивает ограничение внешнего ключа, ссылающееся на ключ, который будет, но еще не сгенерирован в последнем файле, запускается ошибка 1215. В таком случае вам нужно настроить порядок генерации файлов миграции. Создайте новые файлы в правильном порядке, скопируйте содержимое, а затем удалите неупорядоченные старые файлы.

Я получил ту же ошибку при попытке добавить fk. В моем случае проблема была вызвана ПК таблицы FK, который был отмечен как неподписанный.

У меня была та же проблема.
Я решил это сделать так:

Я создал следующую строку
primary key: (id int(11) unsigned NOT NULL AUTO_INCREMENT)

Я нашел это решение после попытки импортировать таблицу в мой конструктор схем. Если это сработает, дай мне знать!

Не пойму почему, первый foreign_key работает, а второй — нет.

  • Вопрос задан более двух лет назад
  • 4514 просмотров

Решил проблему. Спасибо Laravel и его магии.

Промежуточную таблицу, необходимо создавать после основных users и roles, только после их, создать промежуточную user_role!

Проблема была в порядке создания таблиц ( миграций ) — удалите миграцию, и создайте по новой.

Надеюсь Я не прав, но насколько я понмню, нельзя вызывать $table->foreign() до вызова Schema::create.
У меня заработал фрагмент:

Updated 7-05-2019

In this blog, we’ll look at how to resolve MySQL error code 1215: “Cannot add foreign key constraint”.

Our Support customers often come to us with things like “My database deployment fails with error 1215”, “Am trying to create a foreign key and can’t get it working” or “Why am I unable to create a constraint?” To be honest, the error message doesn’t help much. You just get the following line:

ERROR 1215 (HY000): Cannot add foreign key constraint

There’s actually a multitude of reasons this can happen, and in this blog post is a compendium of the most common reasons why you can get MySQL Error Code 1215, how to diagnose your case to find which one is affecting you, and potential solutions for adding the foreign key.

(Note: be careful when applying the proposed solutions, as many involve ALTERing the parent table and that can take a long time blocking the table, depending on your table size, MySQL version and the specific ALTER operation being applied; In many cases using pt-online-schema-change will be likely a good idea).

So, onto the solutions:

The best way to start investigating this error is by getting more information about it from LATEST FOREIGN KEY ERROR section of SHOW ENGINE INNODB STATUS . This will give you a hint regarding the problem, which should help you identify your case in the list below.

1) The table or index the constraint refers to does not exist yet (usual when loading dumps).

How to diagnose: Run SHOW TABLES or SHOW CREATE TABLE for each of the parent tables. If you get error 1146 for any of them, it means tables are being created in the wrong order.
How to fix: Run the missing CREATE TABLE and try again, or temporarily disable foreign-key-checks. This is especially needed during backup restores where circular references might exist. Simply run:

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: