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
相关产品推荐
相关产品推荐

