You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含主键时创建外键出现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:05:13