【问题标题】:Rust Diesel is not recognizing primary keyRust Diesel 无法识别主键
【发布时间】:2021-11-24 13:17:15
【问题描述】:

这是我的 up.sql 文件:

    `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `first_name` VARCHAR(255),
    `last_name` VARCHAR(255),
    `user_name` VARCHAR(255) NOT NULL UNIQUE,
    `email` VARCHAR(255) NOT NULL UNIQUE,
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
);

当我运行柴油迁移时,我收到以下错误:

Diesel 仅支持带有主键的表。表用户没有主键

不知道我做错了什么,任何帮助将不胜感激!

【问题讨论】:

    标签: mysql sql rust rust-diesel


    【解决方案1】:

    我最终直接在 mysql 中手动创建表,但是当我尝试生成架构时,我再次收到来自柴油 cli 的“无主键”错误消息。所以我开始玩弄我的 sql 看看我是否可以让它工作,最终它使用了以下方法:

    CREATE TABLE users (
        `id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `first_name` VARCHAR(255),
        `last_name` VARCHAR(255),
        `user_name` VARCHAR(255) NOT NULL UNIQUE,
        `email` VARCHAR(255) NOT NULL UNIQUE,
        `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
    

    似乎为了使diesel 将列识别为具有PRIMARY KEY,主键属性必须是最后一个指定的属性。

    我不确定这是一个错误、一个已知的怪癖还是有效的语法。在任何情况下,追踪这件事都相当烦人。如果它看起来是一个可靠的解决方案,我会做更多的测试并接受这个答案。

    (编辑:我还用类似的 SQL 查询对此进行了测试,其中 AUTO_INCREMENT 出现在 PRIMARY KEY 之后,但它不起作用)

    【讨论】:

    • Diesel 使用 mysql 提供的信息模式来接收有关当前模式的信息。这包括表名、有关任何列的相应信息以及有关外键和主键的信息。如果柴油 cli 发出消息说某个表没有主键,那是因为信息模式中没有列出主键。此外,这似乎是一个高度依赖平台的问题。如果您有兴趣帮助解决此问题,请随时在相应问题中添加信息(github.com/diesel-rs/diesel/issues/2786)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多