Mysql 外键赢得';不加

Mysql 外键赢得';不加,mysql,sql,Mysql,Sql,我有这两个表,但外键无法添加。这是我正在使用的查询,但我一直无法添加外键错误。我还包括CREATETABLE语句。谢谢你的帮助 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, `cours

我有这两个表,但外键无法添加。这是我正在使用的查询,但我一直无法添加外键错误。我还包括CREATETABLE语句。谢谢你的帮助

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`)
 )

MySQL中的外键必须引用索引列。我认为您真正想要做的是在“courses”表中添加一个外键列,例如FKTacherId列,如下所示:

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位教师


编辑问题并添加您正在使用的SQL server(假设从背面看是MySQL)。也不能将外键设置为表中的非主键。我假设您在尝试时遇到错误,请也添加该错误。您正在尝试在创建表之前添加约束。此外,父列需要是主键或至少是唯一的是MySQL,我之前没有添加外键,表已经被删除added@SamiKuhmonen您可以将外键设置为非主键