我在使用外键约束时遇到了一些问题,并且可能未将代码正确地组合在一起。

这个想法是,airports表将只接受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);


谁能解决这个问题?

最佳答案

看来您正在使用的数据库引擎中尚未实现外键。
Why doesn't MySQL's MyISAM engine support Foreign keys?

也许考虑切换到InnoDb?

09-25 16:31