Код на грешка:1005 -- във вашия код има грешна препратка към първичен ключ
Обикновено това се дължи на реферирано поле за външен ключ, което не съществува. Възможно е да имате правописна грешка или да отметнете главния регистър, че трябва да е същият, или има несъответствие на типа поле. Полетата, свързани с чужди ключове, трябва да съвпадат точно с дефинициите.
Някои известни причини може да са:
- Двете ключови полета тип и/или размер не съвпадат точно. Например, ако един е
INT(10)
ключовото поле трябва да бъдеINT(10)
също така, а неINT(11)
илиTINYINT
. Може да искате да потвърдите размера на полето, като използватеSHOW
CREATE
TABLE
защото браузърът на заявки понякога визуално показва самоINTEGER
и за дветеINT(10)
иINT(11)
. Трябва също да проверите дали единият не еSIGNED
а другият еUNSIGNED
. И двете трябва да са абсолютно еднакви. - Едно от ключовите полета, които се опитвате да препратите, няма индекс и/или не е първичен ключ. Ако едно от полетата в връзката не е първичен ключ, трябва да създадете индекс за това поле.
- Името на външния ключ е дубликат на вече съществуващ ключ. Проверете дали името на вашия външен ключ е уникално във вашата база данни. Просто добавете няколко произволни знака в края на името на вашия ключ, за да тествате това.
- Една или и двете ви таблици са
MyISAM
маса. За да използвате външни ключове, и двете таблици трябва да саInnoDB
. (Всъщност, ако и двете таблици саMyISAM
тогава няма да получите съобщение за грешка - просто няма да създаде ключа.) В браузъра на заявки можете да посочите типа на таблицата. - Указали сте каскада
ON
DELETE
SET
NULL
, но съответното ключово поле е настроено наNOT
NULL
. Можете да коригирате това, като промените вашата каскада или зададете полето да разрешаваNULL
стойности. - Уверете се, че опциите Charset и Collate са еднакви както на ниво таблица, така и на ниво отделно поле за ключовите колони.
- Имате стойност по подразбиране (т.е. по подразбиране=0) във вашата колона за външен ключ
- Едно от полетата във връзката е част от комбиниран (съставен) ключ и няма собствен индивидуален индекс. Въпреки че полето има индекс като част от съставния ключ, трябва да създадете отделен индекс само за това ключово поле, за да го използвате в ограничение.
- Имате синтактична грешка във вашия
ALTER
изявление или сте въвели погрешно едно от имената на полетата във връзката - Името на вашия външен ключ надвишава максималната дължина от 64 знака.
За повече подробности вижте:MySQL грешка номер 1005 Не може да се създаде таблица