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

TypeORM 如何创建指定字段升降序规则的唯一UNIQUE索引

TypeORM创建带字段排序规则的唯一索引方法

可以实现,TypeORM原生支持为索引中的每个字段单独指定升序/降序规则,完全可以生成你需要的SQL效果,有两种常用实现方式:

方式1:在实体类中通过装饰器声明

直接在实体类上使用@Index装饰器配置即可,示例代码如下:

import { Entity, Column, Index, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
// 配置唯一索引
@Index('IDX_article_version_latest', ['uuid', 'version', 'updatedAt'], {
  unique: true,
  // 为每个字段单独指定排序方向
  order: {
    uuid: 'ASC',
    version: 'DESC',
    updatedAt: 'DESC'
  }
})
export class Article {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  uuid: string;

  @Column()
  version: number;

  @Column()
  updatedAt: Date;

  // 其余字段可自行补充
}

执行schema:sync命令同步表结构时,就会自动生成你示例中的SQL语句。

方式2:通过迁移文件手动创建

如果你使用迁移管理表结构变更,可以在迁移文件中调用TypeORM内置的索引创建方法:

import { MigrationInterface, QueryRunner } from "typeorm";

export class AddArticleUniqueIndex1690000000000 implements MigrationInterface {
    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.createUniqueIndex(
            // 表名
            'article',
            // 索引配置
            {
                name: 'IDX_article_version_latest',
                columnNames: ['uuid', 'version', 'updatedAt'],
                order: {
                    uuid: 'ASC',
                    version: 'DESC',
                    updatedAt: 'DESC'
                }
            }
        );
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        // 回滚时删除对应索引
        await queryRunner.dropIndex('article', 'IDX_article_version_latest');
    }
}

以上两种方式都不需要手动编写原生SQL,最终生成的索引效果和你给出的SQL示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:04