MySQL 5.7.20创建favorite_food表时遇1064语法错误求助
排查MySQL 5.7.20建表语法错误
嘿,这个语法错误的原因很明确——你的主键约束和外键约束之间缺少了一个分隔用的逗号!
MySQL在解析表级约束的时候,要求多个约束定义之间必须用逗号隔开。你看你的原语句:
CREATE TABLE favorite_food ( person_id SMALLINT UNSIGNED, food VARCHAR(20), CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food) CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id) REFERENCES person (person_id) );
在CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food)这一行结束后,没有加逗号就直接写了下一个约束,MySQL解析器会把后面的CONSTRAINT当成前面主键约束的一部分,自然就报语法错误了。
修正后的正确建表语句
只需要在主键约束的结尾加上逗号即可:
CREATE TABLE favorite_food ( person_id SMALLINT UNSIGNED, food VARCHAR(20), CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food), CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id) REFERENCES person (person_id) );
额外小提示
- 如果你后续还要添加更多表级约束(比如唯一约束),记得每个约束之间都用逗号分隔
- MySQL 5.7.20完全支持这种显式命名约束的语法,只要格式正确就能正常执行
内容的提问来源于stack exchange,提问作者Steven Aguilar
相关产品推荐
相关产品推荐

