2010-01-04 4 views
0

Я получаю эту ошибку при попытке добавить внешний ключ contraint:Ошибка при создании внешнего ключа

#1005 - Can't create table './testtable/#sql-595_146.frm' (errno: 150) 

Мне нужно выполнить команду ON DELETE CASCADE для всех изображений, которые разделяют идентификатор проекта, когда этот проект удаляется. Моя упрощена структура таблицы выглядит следующим образом:

CREATE TABLE IF NOT EXISTS `images` (
`image_id` mediumint(8) unsigned NOT NULL auto_increment, 
`project_id` smallint(6) NOT NULL, 
PRIMARY KEY (`image_id`), 
KEY `project_id_ix` (`project_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ; 

CREATE TABLE IF NOT EXISTS `projects` (
`project_id` smallint(5) unsigned NOT NULL auto_increment, 
PRIMARY KEY (`project_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

Теперь, когда я выполнить запрос ниже, чтобы добавить ограничение, запрос завершается с ошибкой размещен выше. Может ли кто-нибудь помочь?

ALTER TABLE `images` ADD CONSTRAINT `project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `projects` (`project_id`) ON DELETE CASCADE; 

Спасибо, миллион!

+0

Если MySQL сообщает номер ошибки 1005 из инструкции CREATE TABLE, а сообщение об ошибке относится к ошибке 150, создание таблицы завершилось неудачно, потому что ограничение внешнего ключа было неправильно сформировано: http://dev.mysql.com/doc/ refman/5.1/en/innodb-foreign-key-constraints.html –

+0

^Да, я знаю, что говорит ошибка. Я не могу понять, где моя ошибка. Вот почему я прошу о помощи – user239237

ответ

1

Изменить колонки project_id одинакового размера smallint(6) (или 5). Вам также необходимо сделать их подписанными или неподписанными.

... с веб-сайта тузд он говорит:

Соответствующие столбцы внешнего ключа и ссылочного ключа должно иметь аналогичные внутренние типы данных внутри InnoDB, так что их можно сравнивать без преобразования типов. Размер и знак целочисленных типов должны быть одинаковыми. Длина типов строк не обязательно должна быть одинаковой. Для небинных (символьных) строковых столбцов набор символов и сопоставление должны быть одинаковыми.

+0

Он также подписан в одной таблице и без знака в другом. – Powerlord

+0

Поймал, что до того, как я получил ур комментарий. Спасибо, хотя – munch

+0

Это исправлено! Я бы никогда не поймал этого! Спасибо за помощь! – user239237

1

Я думал, что тип данных должен соответствовать. project_id smallint (6) в одной таблице и smallint (5) в другом.

+0

Мунк избил меня к нему. Просто была эта ошибка два дня назад и найдена такая же реклама, которую он опубликовал = D – decompiled

+0

Вот что это было! Спасибо за помощь! – user239237

1

Должно ли project_id оба быть smallint(6)?

+0

Бах. Не появилось всплывающее сообщение «новое сообщение». Старые новости. – Satanicpuppy

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