2013-07-28 3 views
0

У меня возникли проблемы с ограничением внешнего ключа, и, вероятно, я неправильно помещаю код.Ограничение внешнего ключа MySQL

Идея состоит в том, что таблица аэропортов принимает только значение типа, которое находится в таблице apType. Если тип не находится в таблице apType, он должен сгенерировать ошибку. Тем не менее, я тестировал это, и я не могу заставить его генерировать ошибку, он просто помещает тип, введенный в базу данных, и доволен им.

Аэропорт стол:

CREATE TABLE `airport`(
`id` int primary key AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
`rwyCount` int, 
`lat` float(6), 
`lon` float(6), 
`type` varchar(255), 
constraint FOREIGN KEY (type) REFERENCES apType(type) match simple 
)ENGINE=MyISAM DEFAULT CHARSET=latin1; 

apType Таблица:

CREATE TABLE `apType`(
`id` int primary key AUTO_INCREMENT, 
`type` varchar(255) NOT NULL 
)ENGINE=MyISAM DEFAULT CHARSET=latin1; 

вставка значений для apType (это единственные ценности, которые должны быть действительными):

INSERT INTO `apType` (`type`) VALUES ('private'),('public'),('military'); 

Вставка что должен генерировать ошибку:

insert into `airport` (`name` , `rwyCount` , `type` , `lat` , `lon`) values ('failland', 3 , 'space', 45.588611, -122.5975); 

Может ли кто-нибудь выяснить эту проблему?

+0

Есть статьи по всему Интернету, которые объясняют это. Вы пробовали использовать свою любимую поисковую систему? Это очень продуктивный навык для изучения - способность исследовать собственные ответы на свои собственные проблемы. – MatBailie

+0

Я действительно, и многие ответы предоставили полезную информацию, но ничего, что могло решить мою проблему –

ответ

2

Похоже, что внешние ключи еще не реализованы в используемом вами двигателе БД. Why doesn't MySQL's MyISAM engine support Foreign keys?

Возможно, подумайте о переходе на InnoDb?

+0

Я пробовал это, и я получаю # 1005 - Не могу создать таблицу 'todtm-db.airport' (errno: 150) ошибка. –

+0

Что вы должны сделать, прежде чем создать вторую таблицу, создайте индекс. Создать индекс ix в apType (тип); , Это связано с тем, что вы не ссылаетесь на первичный ключ :) Затем создайте стол в аэропорту. – jmpyle771

+0

Я полностью забыл, что у меня было это ссылка на нечто иное, чем первичный ключ. Исправлено, оно работает и дает правильную ошибку. спасибо –

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