Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top