MySQL ошибка 150, не могу создать таблицу - PullRequest
2 голосов
/ 05 августа 2009

У меня проблемы с созданием таблицы, и я не понимаю, в чем дело. 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

Ответы [ 6 ]

14 голосов
/ 05 августа 2009

Убедитесь, что Gebruikers_gebruiker_id и Gebruikers. gebruiker_id имеют одинаковый тип данных.

Также убедитесь, что Gebruikers. gebruiker_id является PRIMARY KEY в Gebruikers

Обновление:

Вы определили ON DELETE SET NULL, а ваш Gebruikers_gebruiker_id - NOT NULL.

Исправьте это (измените на ON DELETE CASCADE или просто удалите предложение), и вы сможете создать ссылку.

4 голосов
/ 12 апреля 2012

В моем случае это обычно из-за несоответствия типов данных. Помните, если это int проверка, что оба unsigned или не

2 голосов
/ 05 сентября 2011

Это не очень глючная характеристика mysql. На это могут быть две возможные причины! 1) типы данных PK и FK не совпадают. 2) Эта ошибка может появляться в версиях до 4.1, где вам нужно явно определить индексы.

1 голос
/ 02 апреля 2016

Еще одна причина добавить:

Эта проблема также может возникать из-за другой кодировки или двигателя

0 голосов
/ 25 июня 2014

У меня было ограничение с тем же именем в другой таблице. Попробуйте изменить имя вашего ограничения.

0 голосов
/ 01 декабря 2010

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

...