2017-04-13 39 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);