2017-04-13 107 views
0

我試圖設置DEFAULT值和NOT NULL對於type_id列,它是instance表的外鍵,但它抱怨MySQL語法。添加外鍵約束時出現語法錯誤

CREATE TABLE `type` (
    `id` int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    `city` varchar(256) 
); 

ALTER TABLE instance ADD COLUMN type_id int(10) unsigned NOT NULL; 

ALTER TABLE instance ADD CONSTRAINT instance_xbf1 DEFAULT 1 
FOREIGN KEY (type_id) 
REFERENCES type(id) int(10) unsigned NOT NULL; 

據抱怨最後一條語句的語法:

Error: \"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT 1\nFOREIGN KEY (type_id)\nREFERENCES type(id) int(10) unsi' at line 1\")", "stdout": "", "stdout_lines": [], "warnings": []}

+0

什麼是實際的錯誤信息? – ceejayoz

+1

'這是抱怨MySQL語法'那些_complaints_包含非常具體的消息,告訴你到底是什麼錯誤。 –

回答

1

你試圖爲外鍵做太多的事情在你的ADD CONSTRAINT聲明。

您可以通過兩種方式添加默認值。無論是作爲列定義的一部分:

ALTER TABLE instance ADD COLUMN type_id int(10) unsigned NOT NULL DEFAULT 1; 
在它自己的說法

或更高版本:

ALTER TABLE instance ALTER type_id SET DEFAULT 1; 

外鍵,你不能定義列的屬性,如數據類型,爲空,默認值etc ...

錯誤消息告訴你,它不期待DEFAULT關鍵字作爲ADD CONSTRAINT的一部分。如果刪除它,它會抱怨數據類型爲&可空性部分:int(10) unsigned NOT NULL,因爲它不期望那些。但是你已經定義了它們。

所以,你ADD CONSTRAINT可以簡化爲:

ALTER TABLE instance ADD CONSTRAINT instance_xbf1 
FOREIGN KEY (type_id) REFERENCES type(id); 
相關問題