2015-09-26 78 views
1

MySQL的:REFERENCES VS FOREIGN KEY + REFERENCESMySQL的:`REFERENCES` VS`外國KEY` +`REFERENCES`

我認爲REFERENCES是某種對於更詳細的FOREIGN KEY REFERENCES語法速記語法。

然而,下表是不是像個它是由一個外鍵約束限制。我可以很容易地添加一個元組,courseid不在Courses關係中。

有人可以澄清這個問題嗎?

CREATE TABLE `Exam`(
    `courseid` VARCHAR(20) REFERENCES `Courses`(courseid) ON DELETE RESTRICT ON UPDATE CASCADE, 
    `examno` INT(1) DEFAULT 1 CHECK(`examno` >= 1), 
    `weight` FLOAT(5) DEFAULT 1 CHECK(`weight` > 0), 
    PRIMARY KEY(courseId, examNo) 
); 

回答

1

您使用的是哪個版本的mysql?

當你運行它時你會得到什麼?

顯示創建表的考試;

我得到的是:

 CREATE TABLE `Exam` (
    `courseid` varchar(20) NOT NULL DEFAULT '', 
    `examno` int(1) NOT NULL DEFAULT '1', 
     `weight` float DEFAULT '1', 
     PRIMARY KEY (`courseid`,`examno`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

這意味着MySQL是無視你的CREATE TABLE語句的 「參考」 部分。我認爲你需要完整的語句,如:

外鍵(PARENT_ID) 參考父(ID) ON DELETE CASCADE

+0

啊哈,這是什麼show命令嗎?我如何在不同的表中創建多個外鍵? – Shuzheng

+0

https://dev.mysql.com/doc/refman/5.5/en/show-create-table.html SHOW CREATE TABLE tbl_name顯示創建指定表的CREATE TABLE語句。 –

+0

Re:如何在不同的表中創建多個外鍵? - 你可以添加課程表的創建語句嗎?爲了在課程表和考試表之間創建外鍵,關鍵字段必須是兩個表中的主鍵,並且它們在每個表中必須是相同類型的。目前,exam.courseid不是檢查表中的主鍵。 –

相關問題