Я искал решение этой проблемы в Интернете и проверял вопросы о переполнении стека, но ни одно из решений не помогло в моем случае.
Я хочу создать внешний ключ из таблицы sira_no в metal_kod.
ALTER TABLE sira_no
ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)
REFERENCES metal_kod(METAL_KODU)
ON DELETE SET NULL
ON UPDATE SET NULL ;
Этот скрипт возвращает:
Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)
Я попытался добавить индекс в указанную таблицу:
CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);
Я проверил METAL_KODU в обеих таблицах (кодировка и сопоставление), но не смог найти решения этой проблемы. Как я могу исправить эту проблему?
Вот таблица metal_kod:
METAL_KODU varchar(4) NO PRI
DURUM bit(1) NO
METAL_ISMI varchar(30) NO
AYAR_YOGUNLUK smallint(6) YES 100
mysql
foreign-keys
mysql-error-1005
ламострета
источник
источник
metal_kod
таблицы ... какое поле в этой таблице должно ссылаться на внешний ключ?Ответы:
Код ошибки: 1005 - в вашем коде неверная ссылка на первичный ключ
Обычно это связано с тем, что указанное поле внешнего ключа не существует. Возможно, вы допустили опечатку, проверьте, должно ли оно совпадать, или есть несоответствие типа поля. Поля, связанные с внешним ключом, должны точно соответствовать определениям.
Некоторые известные причины могут быть:
INT(10)
ключевое поле должно бытьINT(10)
также, а неINT(11)
илиTINYINT
. Вы можете подтвердить размер поля с помощью ,SHOW
CREATE
TABLE
так как Query Browser иногда визуально показать толькоINTEGER
для обоихINT(10)
иINT(11)
. Вы также должны проверить, что одного нет,SIGNED
а другого нетUNSIGNED
. Они оба должны быть одинаковыми.MyISAM
таблица. Чтобы использовать внешние ключи, обе таблицы должны бытьInnoDB
. (На самом деле, если обе таблицы,MyISAM
вы не получите сообщение об ошибке - он просто не создаст ключ.) В браузере запросов вы можете указать тип таблицы.ON
DELETE
SET
NULL
, но для соответствующего ключевого поля установлено значениеNOT
NULL
. Вы можете исправить это, либо изменив каскад, либо установив в поле допустимыеNULL
значения.ALTER
заявлении или вы неправильно ввели одно из имен полей в отношенииДля получения дополнительных сведений см .: Ошибка MySQL № 1005 Не удается создать таблицу.
источник
SHOW ENGINE INNODB STATUS
как упоминалось в этом вопросе, помогло мне диагностировать мою конкретную проблему (PEBCAK, в моем случае ...)set names 'utf8', storage_engine=MYISAM;
в начало скрипта решило проблему для меня. Спасибо @ user319198 и @Stefano за подробный ответ! : o)Это также может произойти при экспорте вашей базы данных с одного сервера на другой, и по умолчанию таблицы перечислены в алфавитном порядке.
Итак, ваша первая таблица может иметь внешний ключ другой таблицы, которую еще предстоит создать. В таких случаях отключите foreign_key_checks и создайте базу данных.
Просто добавьте в свой скрипт следующее:
и он должен работать.
источник
Очень часто это происходит, когда внешний ключ и ссылочный ключ имеют разные типы и длину.
источник
Иногда это происходит из-за того, что главная таблица отбрасывается (возможно, путем отключения foreign_key_checks), но CONSTRAINT внешнего ключа все еще существует в других таблицах. В моем случае я уронил таблицу и попытался воссоздать ее, но для меня это вызывало ту же ошибку.
Поэтому попробуйте удалить все ОГРАНИЧЕНИЯ внешнего ключа из всех таблиц, если они есть, а затем обновить или создать таблицу.
источник
У меня была аналогичная ошибка. Проблема заключалась в том, что дочерняя и родительская таблицы не имели одинаковой кодировки и сопоставления. Это можно исправить, добавив ENGINE = InnoDB DEFAULT CHARACTER SET = utf8;
... в операторе SQL означает, что отсутствует какой-то код.
источник
Внешний ключ должен иметь тот же тип, что и первичный ключ, на который он ссылается. В примере типа «INT UNSIGNED NOT NULL» внешний ключ также должен иметь значение «INT UNSIGNED NOT NULL»
источник
Код ошибки: 1005
У меня была аналогичная проблема, поэтому вот несколько вещей, которые я пробовал (не в любом порядке, кроме решения :))
Наконец, я увидел, что у меня открыто два редактора. Один из них находится в PhpStorm (JetBrains), а другой - в рабочей среде MySQL. Похоже, что PhpStorm / MySQL Workbench создает какую-то блокировку редактирования.
Я закрыл PhpStorm, просто чтобы проверить, была ли блокировка (могло быть и наоборот). Это решило мою проблему.
источник
У меня было такое же сообщение об ошибке. Наконец, я понял, что неправильно написал имя таблицы в команде:
против
Интересно, почему MySQL не может сказать, что такой таблицы не существует ...
источник
MyISAM только что упоминался. Просто попробуйте добавить ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2; в конце оператора, предполагая, что другие ваши таблицы были созданы с помощью MyISAM.
источник
В моем случае это произошло, когда одна таблица - это InnoB, а другая - MyISAM. Замена движка одной таблицы через MySQL Workbench решает за меня.
источник
Это произошло в моем случае, потому что имя таблицы, на которую ссылается объявление ограничения, было неправильным (я забыл верхний регистр в имени таблицы):
источник
проверьте, что обе таблицы имеют одинаковую схему InnoDB MyISAM. Я сделал их все одинаково в моем случае InnoDB и работал
источник
Моя проблема не была указана в списке, это было что-то настолько глупое ... Таблица с
FK
PK была составной,PK
которая была объявлена следующим образом: первичный ключ (CNPJ
,CEP
) Я хотел, чтобы поле CEPFK
находилось в другой таблице, и я был застрял в этой ошибке, мораль истории просто перевернула приведенный выше код для первичного ключа (CEP
,CNPJ
), и это сработало. Получите чаевые своим друзьям.источник