我有这两个表,但外键不会添加。这是我使用的查询但我不断添加无法添加外键错误。我还包括了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`)
)
答案 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名教师排除在课程约束之外。