含主键时创建外键出现MariaDB #1064 SQL语法错误求助
问题
创建projects表时触发#1064语法错误,报错提示第8行REFERENCES users(id)附近语法有误。该表包含自增主键projectId,但之前创建无主键的about表时,类似的外键写法能正常执行,怀疑问题和主键有关。
报错信息:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'REFERENCES users(id)
)' at line 8
projects表原SQL语句:
CREATE TABLE projects( projectId INT NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, description VARCHAR(250), others INT NOT NULL, notes TEXT, userId INT NOT NULL, CONSTRAINT fk_userId FOREIGN KEY userId REFERENCES users(id) );
可正常执行的about表SQL语句:
CREATE TABLE about( pfp longblob, bio VARCHAR(250) NOT NULL DEFAULT " ", friends INT NOT NULL DEFAULT 0, followers INT NOT NULL DEFAULT 0, id INT NOT NULL, CONSTRAINT fk_id FOREIGN KEY id REFERENCES users(id) );
解决方法
问题根源是外键字段的语法不规范:SQL标准要求定义外键时,被引用的字段必须用括号包裹。about表的写法能运行只是因为MariaDB的宽松模式,但碰到带自增主键的表时,语法校验会严格执行,直接报错。
另外还有个隐藏问题:自增字段projectId必须声明为PRIMARY KEY,MariaDB规定自增列必须是主键或唯一键的一部分,原语句漏了这点也会导致后续问题。
修正后的projects表SQL语句:
CREATE TABLE projects( projectId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, description VARCHAR(250), others INT NOT NULL, notes TEXT, userId INT NOT NULL, CONSTRAINT fk_userId FOREIGN KEY (userId) REFERENCES users(id) );
内容的提问来源于stack exchange,提问作者invention ads
相关产品推荐
相关产品推荐

