2014-04-04 112 views
1

我喜歡添加外鍵,這張表,但不行!如果我嘗試新的表格不起作用,而其他的舊錶格則工作。有什麼問題?請幫助我。MySQL錯誤1215:無法添加外鍵約束,innodb,新表

CREATE TABLE `tanora` (
`idtanora` int(11) NOT NULL, 
`tema` varchar(250) NULL, 
`megjegyzes` varchar(255) DEFAULT NULL, 
`datum` date NOT NULL, 
`osztaly` varchar(20) NOT NULL, 
`megtartott` int(11) NOT NULL, 
`targy` varchar(45) NOT NULL, 
`kezdete` time NOT NULL, 
`vege` time NOT NULL, 
PRIMARY KEY (`idtanora`), 
UNIQUE KEY `idtanora_UNIQUE` (`idtanora`), 
KEY `osztazon_idx` (`osztaly`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci; 



CREATE TABLE `osztaly` (
`osztalyazon` varchar(20) NOT NULL, 
`osztalyfonokazon` varchar(11) NOT NULL, 
`osztalynev` varchar(45) NOT NULL, 
`indul` year(4) NOT NULL, 
PRIMARY KEY (`osztalyazon`), 
UNIQUE KEY `osztalyazon_UNIQUE` (`osztalyazon`), 
KEY `ofazon_idx` (`osztalyfonokazon`), 
CONSTRAINT `tanarazon01` FOREIGN KEY (`osztalyfonokazon`) REFERENCES `tanar` (`szemelyiszam`) ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci; 



ERROR 1215: Cannot add foreign key constraint 
SQL Statement: 

ALTER TABLE `enaplo`.`tanora` 
ADD CONSTRAINT `osztalyra` 
FOREIGN KEY (`osztaly`) 
REFERENCES `enaplo`.`osztaly` (`osztalyazon`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION 


ERROR: Error when running failback script. Details follow. 

ERROR 1050: Table 'tanora' already exists 
SQL Statement: 
CREATE TABLE `tanora` (
`idtanora` int(11) NOT NULL, 
`tema` varchar(250) NOT NULL, 
`megjegyzes` varchar(255) DEFAULT NULL, 
`datum` date NOT NULL, 
`osztaly` varchar(20) NOT NULL, 
`megtartott` int(11) NOT NULL, 
`targy` varchar(45) NOT NULL, 
`kezdete` time NOT NULL, 
`vege` time NOT NULL, 
PRIMARY KEY (`idtanora`), 
UNIQUE KEY `idtanora_UNIQUE` (`idtanora`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci 



foreign key (osztaly) 
references enaplo.osztaly (osztalyazon) 
on delete no action 
on update no action: 
Cannot find an index in the referenced table where the 
referenced columns appear as the first columns, or column types 
in the table and the referenced table do not match for constraint. 
Note that the internal storage type of ENUM and SET changed in 
tables created with >= InnoDB-4.1.12, and such columns in old tables 
cannot be referenced by such columns in new tables. See http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html 
for correct foreign key definition. 

最新問題,請幫忙?!

看起來像你的帖子主要是代碼;請添加一些更多details.looks喜歡你的帖子主要是代碼;請添加一些更多details.looks喜歡你的帖子主要是代碼;請添加一些更多details.looks喜歡你的帖子主要是代碼;請添加一些更多details.looks喜歡你的帖子主要是代碼;請添加一些更多details.looks喜歡你的帖子主要是代碼;請添加一些更多details.looks喜歡你的帖子主要是代碼;請添加更多的細節。

+1

你能提供tanar表模式,好嗎? – citizen404

回答

1

請確保您有一致列定義

在你引用表osztaly外鍵列osztalyfonokazon需要具有完全相同的特性被定義爲tanar表應用到基準場。

目前,osztalyfonokazonosztaly定義如下:

`osztalyfonokazon` VARCHAR(11) NOT NULL 

因此,然後在tanarszemelyiszam定義應該看起來要麼

`szemelyiszam` VARCHAR(11) PRIMARY KEY 

`szemelyiszam` VARCHAR(11) UNIQUE KEY NOT NULL 

取決於喲你的需求。

無論哪種方式,確保szemelyiszamPRIMARY KEY或者至少聲明中引用tanarNOT NULL一個UNIQUE KEY

此外,出於性能方面的原因,MySQL要求將參考列索引爲 。但是,系統不會強制執行 要求,即所引用的列爲UNIQUE或聲明爲NOT NULL。對於包含NULL值的非唯一鍵或鍵 的外鍵引用的處理,對於諸如 UPDATE或DELETE CASCADE之類的操作沒有很好地定義。建議您使用外部密鑰 只引用UNIQUE(包括PRIMARY)和NOT NULL密鑰。

Source

+0

@ user3498248 - 您能提供反饋嗎?它現在工作嗎?如果答案是肯定的,請不要忘記投票並接受答案。 – citizen404

相關問題