外键不会添加

时间:2016-03-27 19:40:20

标签: mysql sql

我有这两个表,但外键不会添加。这是我使用的查询但我不断添加无法添加外键错误。我还包括了Create table语句。谢谢你的帮助

ALTER TABLE courses ADD CONSTRAINT fk_fs FOREIGN KEY (teacher1) 
REFERENCES teachers(fullName) 

CREATE TABLE IF NOT EXISTS `courses` (
`courseID` int(11) NOT NULL AUTO_INCREMENT,
`courseName` varchar(200) DEFAULT NULL,
`module1` varchar(200) DEFAULT NULL,
`module2` varchar(200) DEFAULT NULL,
`module3` varchar(200) DEFAULT NULL,
`module4` varchar(200) DEFAULT NULL,
`teacher1` varchar(200) DEFAULT NULL,
`teacher2` varchar(200) DEFAULT NULL,
`teacher3` varchar(200) DEFAULT NULL,
`teacher4` varchar(200) DEFAULT NULL,
 PRIMARY KEY (`courseID`)
 )

 CREATE TABLE IF NOT EXISTS `teachers` (
`teacherID` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) DEFAULT NULL,
`fullName` varchar(200) DEFAULT NULL,
`officeOpen` varchar(5) DEFAULT NULL,
`officeClose` varchar(5) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`teacherID`)
 )

1 个答案:

答案 0 :(得分:0)

MySQL中的外键必须引用索引列。我认为你真正想做的是在"课程"中添加一个外键列。表,例如fkTeacherID列如下:

CREATE TABLE IF NOT EXISTS `courses` (
`courseID` int(11) NOT NULL AUTO_INCREMENT,
`courseName` varchar(200) DEFAULT NULL,
`module1` varchar(200) DEFAULT NULL,
`module2` varchar(200) DEFAULT NULL,
`module3` varchar(200) DEFAULT NULL,
`module4` varchar(200) DEFAULT NULL,
`teacher1` varchar(200) DEFAULT NULL,
`teacher2` varchar(200) DEFAULT NULL,
`teacher3` varchar(200) DEFAULT NULL,
`teacher4` varchar(200) DEFAULT NULL,
 `fkTeacherID` int(11),
 PRIMARY KEY (`courseID`)
 );

 CREATE TABLE IF NOT EXISTS `teachers` (
`teacherID` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) DEFAULT NULL,
`fullName` varchar(200) DEFAULT NULL,
`officeOpen` varchar(5) DEFAULT NULL,
`officeClose` varchar(5) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`teacherID`)
 );

ALTER TABLE courses ADD CONSTRAINT fk_fs FOREIGN KEY (fkTeacherID) 
REFERENCES teachers(TeacherID) 

然后,您可以创建如下的查询:

SELECT fullName 
from teachers t
inner join courses c on t.TeacherID = c.fkTeacherID 

然后您可以删除teacher1..4列。您可能也希望与模块相同。您还将4名教师排除在课程约束之外。

SQLFIDDLE