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

MySQL表已定义主键 执行Diesel迁移报错提示表无主键怎么办

问题修复方案

核心原因排查

你当前的报错和你贴出的up.sql定义存在不匹配项,优先排查两个核心问题:

  • 报错日志显示运行的迁移是2021-09-21-202330_create_posts,但你贴出的SQL是创建errors表,首先确认你修改的是该迁移文件的内容,是否存在改错文件、旧迁移内容未更新、多个迁移文件重复定义errors表的情况。
  • 你仅删除了__diesel_schema_migrations元数据表,没有清理数据库中残留的无主键旧errors表,Diesel读取库内现有表结构时仍然会检测到异常表。

分步修复操作

  1. 调整SQL写法适配Diesel MySQL规则
    将up.sql的表结构调整为Diesel兼容的标准写法,显式指定主键属性、存储引擎和字符集,避免识别异常:
CREATE TABLE errors 
(
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    matching_string VARCHAR(255) NOT NULL UNIQUE,
    reference_url TEXT NOT NULL,
    reference_case TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

down.sql内容保持不变即可。

  1. 彻底清理数据库残留
    手动连接你的MySQL数据库,执行以下命令清理旧数据:
DROP TABLE IF EXISTS errors;
DROP TABLE IF EXISTS __diesel_schema_migrations;
  1. 对齐Diesel版本
    Diesel CLI版本和项目Cargo.toml中依赖的Diesel版本不一致时,极易出现结构识别异常,执行以下命令核对版本:
# 查看本地安装的Diesel CLI版本
diesel --version
# 查看项目依赖的Diesel版本
grep diesel Cargo.toml

如果版本号不匹配,重新安装对应版本的CLI:

cargo install diesel_cli --no-default-features --features mysql --version <你项目依赖的Diesel版本号>
  1. 重新执行迁移
diesel migration run

额外排查项

如果执行后仍然报错,检查项目根目录的diesel.toml配置:

  • 确认连接的数据库地址是你当前操作的数据库,避免连错库读取到其他环境的旧表结构
  • 确认[print_schema]配置块没有添加过滤主键的规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:27:01