2015-10-05 84 views
0

試圖創建一個外鍵MovieNamejobinfo我得到一個error code : 1215 Cannot add foreign key constraint錯誤代碼1215:外鍵錯誤:爲什麼我得到這個?

父表(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)錯誤被拋出,因爲當這個聲明我s刪除了命令工作正常。我得到這個錯誤的原因是什麼?

回答

1

對於同一個表,不能有2個外鍵作爲外鍵定義2個表之間的唯一關係。另外一個外鍵必須唯一標識另一個表中的一行,並且因此始終引用唯一字段,無論是通過唯一約束還是通過主鍵(這隱含地是唯一約束)。

在您的具體情況:如果你有2部電影與標識64和684,這兩個標題爲「過關斬將」,而是一個from 1987one from 1963,你的數據庫,肯定是因爲你的定義就是腐敗。