Ошибка MySQL 150, невозможно создать таблицу
-
22-07-2019 - |
Вопрос
У меня возникли проблемы с созданием таблицы, и я не понимаю, в чем дело.phpMyAdmin устанавливает индикатор ошибки рядом с объявлением PRIMARY KEY...Я не понимаю, почему это неправильно...
Эта таблица является дочерней таблицей, которая имеет идентифицирующее отношение «один ко многим» с другой таблицей.
CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 45 ) NOT NULL ,
`beschrijving` VARCHAR( 45 ) NULL ,
`Gebruikers_gebruiker_id` INT NOT NULL ,
PRIMARY KEY ( `voorwerpen_id` , `Gebruikers_gebruiker_id` ) ,
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY ( `Gebruikers_gebruiker_id` ) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id`
) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB;
MySQL said: Documentation
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150)
РЕДАКТИРОВАТЬ:это вся документация по коду ошибки, которую я могу найти: Связь
РЕДАКТИРОВАТЬ2: картинка удалена
РЕДАКТИРОВАТЬ3:
CREATE TABLE `gebruikers` (
`gebruiker_id` int(11) NOT NULL,
`naam` varchar(45) NOT NULL,
`straat` varchar(45) NOT NULL,
`gemeente` varchar(45) NOT NULL,
`mail` varchar(45) NOT NULL,
`beschrijving` varchar(45) DEFAULT NULL,
PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Решение
Проверь это Gebruikers_gebruiker_id
и Gebruikers
.gebruiker_id
имеют тот же тип данных.
Также проверьте это Gebruikers
.gebruiker_id
это PRIMARY KEY
в Gebruikers
Обновлять:
У вас есть ON DELETE SET NULL
определено, в то время как ваш Gebruikers_gebruiker_id
определяется как NOT NULL
.
Исправьте это (измените на ON DELETE CASCADE
или просто удалите это предложение), и вы сможете создать ссылку.
Другие советы
В моем случае это обычно из-за несоответствия типов данных. Помните, если это проверка типа int, оба они без знака или нет
Это не очень ошибочная характеристика mysql. На это могут быть две возможные причины! 1) типы данных PK и FK не совпадают. 2) Эта ошибка может появляться в версиях до 4.1, где вам нужно явно определить индексы.
Еще одна причина добавить:
Другая кодировка или движок также будут причиной этой проблемы
По моему опыту, это очень ошибочная характеристика MySQL - и наименьшая проблема - просто сбросить структуру таблицы и данные, затем отбросить таблицу и повторно запустить SQL из дампа, а затем вручную заново создать индексы и ограничения внешнего ключа, где это необходимо.
У меня было ограничение с тем же именем в другой таблице. Попробуйте изменить имя вашего ограничения.