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

如何用sequelize-typescript结合SQLite创建指定复合主键?

问题原因

你给hash和filePath两个字段都加了unique: true,这会让Sequelize给每个字段单独创建唯一约束,导致哪怕filePath不同,重复的hash也会触发校验失败。而你实际需要的是复合主键(联合主键),只要求两者的组合唯一,不是单个字段单独唯一。

解决方法

去掉两个字段配置里的unique: true,只保留@PrimaryKey装饰器即可——复合主键本身就会保证hash和filePath的组合唯一。

修改后的代码如下:

@Table({
    tableName: 'files'
})
class File extends Model {
  
    @PrimaryKey
    @Column({
        allowNull: false,
    })
    hash!: string
    
    @PrimaryKey
    @Column({
        allowNull: false,
    })
    filePath!: string
}
验证效果

这样配置后,Sequelize生成的SQL会和你预期的一致:

CREATE TABLE files(
   `hash` VARCHAR(255) NOT NULL,
   `filePath` VARCHAR(255) NOT NULL,
   PRIMARY KEY(hash, filePath)
);

此时插入同一hash但不同filePath的记录不会报错,只有当hash和filePath完全重复时才会触发主键约束报错,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:25:19