尝试在表MovieName
中创建外键jobinfo
时,我得到error code : 1215 Cannot add foreign key constraint
父表(contentinfo
)
CREATE TABLE `contentinfo` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Movie ID',
`Name` varchar(25) DEFAULT NULL,
`Original_Language` varchar(25) DEFAULT NULL,
`Dubbed_Language` varchar(25) DEFAULT NULL,
`InputType` varchar(25) DEFAULT NULL,
`CreationTime` date DEFAULT NULL,
`VidEncodingTemplatePath` varchar(255) DEFAULT NULL,
`AudEncodingTemplatePath` varchar(255) DEFAULT NULL,
`CCEncodingTemplatePath` varchar(255) DEFAULT NULL,
`ContentType` varchar(10) DEFAULT NULL,
`RefMovieID` int(11) DEFAULT NULL COMMENT 'For dubbed movie only',
`NumberOfPartsInMovie` varchar(255) DEFAULT NULL,
`Multilingual` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=11021 DEFAULT CHARSET=latin1
当我尝试创建一个存在2个外键的表jobinfo
时会抛出错误:
create table jobinfo( JobID int, ContainerID int,
MovieName varchar(25), FileName varchar(25), MediaType varchar(25),
ContentType varchar(25), ReelIndex int,
ReelType varchar(25), ProcessingUnitID int,
VidEncodingTemplate varchar(255), AudEncodingTemplate varchar(255),
CCEncodingTemplate varchar(255), StartIndex int,
EndIndex int, SplitIndex int, Duration int,FileSize int, Progress int,
JStatus varchar(25), QCStatus varchar(25),
QCComments varchar(255), ProcessStartTime datetime, ProcessEndTime datetime,
ProcessingStatus varchar(25), PackagingStatus varchar(30),
primary key(JobID),
foreign key (ContainerID) references contentinfo(id),
foreign key (MovieName) references contentinfo(Name));
由于语句foreign key (MovieName) references contentinfo(Name)
而引发错误,因为删除此语句时该命令正常工作。我收到此错误的原因是什么?
答案 0 :(得分:1)
同一个表不能有2个外键,因为外键定义了2个表之间的唯一关系。外键也必须唯一地标识另一个表中的行,因此始终引用唯一字段,无论是通过唯一约束还是主键(隐式地是唯一约束)。
在您的具体情况下:如果您有2部ID为64和684的电影,标题为“正在跑步的人”但只有一部from 1987和one from 1963,您的数据库本身就会因为您的数据而损坏怎么办?定义