You need to enable JavaScript to run this app. MySQL执行CREATE TABLE建表报1064(42000)语法错误的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

MySQL执行CREATE TABLE建表报1064(42000)语法错误的问题排查

报错原因及语法错误汇总

你遇到的1064语法错误由多个问题共同导致,具体错误位置如下:

  • 字段/约束定义之间遗漏逗号
    这是触发当前报错的直接原因:SQL要求表内的多个字段、约束定义之间必须用英文逗号分隔。你写的actor表中first_name VARCHAR(20) NOT NULL行末尾、middle_name VARCHAR(20)行末尾、last_name VARCHAR(20) NOT NULL行末尾都没有加逗号,SQL无法识别字段分界,因此抛出middle_name附近的语法错误。你删除middle_name、last_name字段后,actor表仅剩余一个字段,不需要字段分隔符,所以可以创建成功,但其余所有表都存在同样的漏写逗号问题,因此下一张表执行时仍会报相同的语法错误。
  • 外键定义语法错误
    单列外键的字段名必须用括号包裹,你写的FOREIGN KEY tag_name REFERENCES tag(name)不符合规范,正确写法是FOREIGN KEY (tag_name) REFERENCES tag(name),show_tag、show_genre表的外键都存在该问题。
  • 依赖表创建顺序错误
    你将show表放在建表列表的最后,但show_tag、show_genre、show_actor三张表都通过外键依赖了show表,执行到这三张表时show表还未创建,会触发外键关联错误。需要将show表调整到所有引用它的表之前创建。
  • 外键关联字段名不匹配
    show_actor表的外键定义写的是REFERENCES actor(fn, ln),但actor表的对应字段名为first_name、last_name,不存在fn、ln字段,关联会失败。
  • 关键字冲突(潜在问题)
    show是MySQL的保留关键字,用作表名时需要用反引号包裹,避免触发语法冲突。
修正后的代码示例
tables = ["""
    CREATE TABLE IF NOT EXISTS tag (
        name VARCHAR(20) NOT NULL PRIMARY KEY
    );
""", """
    CREATE TABLE IF NOT EXISTS genre (
        name VARCHAR(20) NOT NULL PRIMARY KEY
    );
""", """
    CREATE TABLE IF NOT EXISTS actor (
        first_name VARCHAR(20) NOT NULL,
        middle_name VARCHAR(20),
        last_name VARCHAR(20) NOT NULL,
        PRIMARY KEY(first_name, last_name)
    );
""", """
    CREATE TABLE IF NOT EXISTS `show` (
        title VARCHAR(20) NOT NULL PRIMARY KEY,
        view_rating VARCHAR(8),
        release_date DATE,
        summary TEXT,
        score DECIMAL(2, 1)
    );
""", """
    CREATE TABLE IF NOT EXISTS show_tag (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        tag_name VARCHAR(20) NOT NULL,
        show_title VARCHAR(20) NOT NULL,
        FOREIGN KEY (tag_name) REFERENCES tag(name),
        FOREIGN KEY (show_title) REFERENCES `show`(title)
    );
""", """
    CREATE TABLE IF NOT EXISTS show_genre (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        genre_name VARCHAR(20) NOT NULL,
        show_title VARCHAR(20) NOT NULL,
        FOREIGN KEY (genre_name) REFERENCES genre(name),
        FOREIGN KEY (show_title) REFERENCES `show`(title)
    );
""", """
    CREATE TABLE IF NOT EXISTS show_actor (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        actor_fn VARCHAR(20) NOT NULL,
        actor_ln VARCHAR(20) NOT NULL,
        show_title VARCHAR(20) NOT NULL,
        FOREIGN KEY (actor_fn, actor_ln) REFERENCES actor(first_name, last_name),
        FOREIGN KEY (show_title) REFERENCES `show`(title)
    );
"""]

内容的提问来源于stack exchange,提问作者binny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:45:08