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