2016-03-27 13 views
0

Ich habe diese zwei Tabellen, aber der Fremdschlüssel wird nicht hinzugefügt. Dies ist die Abfrage, die ich benutze, aber ich bekomme immer noch keinen Fremdschlüsselfehler. Ich habe auch die Create-Tabellenanweisungen eingefügt. Danke für jede HilfeFremdschlüssel wird nicht hinzugefügt

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

Sie die Frage bearbeiten und den SQL-Server Sie verwenden (unter der Annahme, MySQL von den Backticks) hinzuzufügen. Sie können auch keine Fremdschlüssel für Nicht-Primärschlüssel in der Tabelle erstellen. Ich nehme an, Sie erhalten einen Fehler beim Versuch, bitte fügen Sie das auch hinzu. –

+0

Sie versuchen, die Einschränkung VOR der Erstellung der Tabelle hinzuzufügen. Auch die übergeordnete Spalte muss primäre KEY oder mindestens eindeutige http://sqlfiddle.com/#!9/c123ae – Mihai

+0

Ja MySQL und ich bin nicht hinzufügen einen Fremdschlüssel zuvor wurden die Tabellen bereits – usershv1994

Antwort

0

Fremdschlüssel in MySQL müssen indizierte Spalten verweisen. Ich denke, was Sie wirklich tun möchten, ist eine Spalte für den Fremdschlüssel zur Tabelle "Kurse" hinzuzufügen, z. fkTeacherID Spalte wie folgt:

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) 

Sie können dann eine Abfrage wie erstellen:

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

können Sie dann die teacher1..4 Spalten beseitigen. Vielleicht möchten Sie auch das gleiche mit Modulen. Sie eliminieren auch die 4 Lehrer zu einer Kursbeschränkung.

SQLFIDDLE

Verwandte Themen