2 回答

TA貢獻1829條經驗 獲得超13個贊
這是因為mysql是不支持check的,雖然語法上不會報錯是,分析建表語句的時候會被忽略.以下是從手冊中摘出來的原文.
=============
Innodb存儲引擎支持FOREIGN KEY和REFERENCES子句。Innodb存儲引擎執行ADD [CONSTRAINT [symbol]] FOREIGN KEY (...) REFERENCES ... (...)。請參見15.2.6.4節,“FOREIGN KEY約束”。對于其它存儲引擎,這些子句會被分析,但是會被忽略。對于所有的存儲引擎,CHECK子句會被分析,但是會被忽略。請參見13.1.5節,“CREATE TABLE語法”。接受這些子句但又忽略子句的原因是為了提高兼容性,以便更容易地從其它SQL服務器中導入代碼,并運行應用程序,創建帶參考數據的表。請參見1.8.5節,“MySQL與標準SQL的差別”。
==============
注意:CHECK子句會被分析,但是會被忽略。

TA貢獻1780條經驗 獲得超4個贊
修改表 albums,為他添加一個外鍵約束.這個約束建在本表的genre_id列上. 參考的是genres表的id列.
這個約束的作用是,保證albums表的genre_id列必須包含在genres表的id列中,要不然插入數據就會報錯.
下面的:
ON DELETE CASCADE 如果被引用表的某id被刪除時,關聯刪除albums表中genre_id列與其相等的記錄.
ON UPDATE CASCADE 如果被引用表的某id被更新時,同時更新albums表中genre_id列與其相等的記錄.
添加回答
舉報