2009-08-05 4 views
2

У меня возникли проблемы с созданием таблицы, и я не понимаю, что случилось. phpMyAdmin устанавливает индикатор ошибки рядом с объявлением PRIMARY KEY ... Я не понимаю, почему это неправильно ...Ошибка MySQL 150, невозможно создать таблицу

Эта таблица является дочерней таблицей, которая имеет взаимно однозначное отношение к другой таблице ,

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) 

EDIT: это вся документация по коду ошибки можно найти: Link

EDIT2: рис удален

EDIT3:

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 

ответ

14

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

Также проверьте, что Gebruikers. gebruiker_id является PRIMARY KEY в Gebruikers

Update:

Вы ON DELETE SET NULL определено, в то время как ваш Gebruikers_gebruiker_id определяется как NOT NULL.

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

+0

ПИК добавляемые для получения дополнительной информации, что вы сказали, кажется, так. – KdgDev

+0

Не могли бы вы завести это утверждение: 'SHOW CREATE TABLE Gebruikers' и опубликовать его вывод здесь? – Quassnoi

+0

Готово. Интересно, нужно ли устанавливать gebruiker_id в уникальное ... но в MySQL workbench, похоже, нет такого параметра ... – KdgDev

0

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

2

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

4

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

0

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

1

Одна из причин, чтобы добавить:

Различные кодировок или двигатель будет также вызвать эту проблему

Смежные вопросы