V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
LandCruiser
V2EX  ›  程序员

Nestjs, TypeORM, MySQL 问题,当插入数据时如何保证某几个字段的唯一性?

  •  
  •   LandCruiser · Jul 31, 2023 · 1532 views
    This topic created in 1011 days ago, the information mentioned may be changed or developed.

    服务端小白,问了 GPT 让先查出来,感觉先查再插入不太对劲,有点麻烦,是否有其他简便方法?

    问题案例 { name:'123', code:'345', dep:'789', type:'666' }

    如何保证插入数据时,name 和 code 都是唯一的呢?

    8 replies    2023-08-03 15:18:02 +08:00
    codehz
        1
    codehz  
       Jul 31, 2023
    直接在数据库里上 unique 索引不就好了? orm 应该也提供类似功能吧
    LandCruiser
        2
    LandCruiser  
    OP
       Jul 31, 2023
    @codehz typeORM 提供了 unique 装饰器,但是不起作用,我查资料说是只有数据库迁移的时候才起作用,离谱。
    jiangzm
        3
    jiangzm  
       Jul 31, 2023
    应该是结构没同步好,手动加下唯一索引就好
    LandCruiser
        4
    LandCruiser  
    OP
       Jul 31, 2023
    @jiangzm
    @codehz 我现在手动设置上 unique 索引了,请问这种做法在开发中常见吗?我刚开始学服务端开发。。。知识不成体系
    Belmode
        5
    Belmode  
       Jul 31, 2023
    表结构同步和迁移这个流程本来就不包含再应用里面。

    即使添加了正确的装饰器,把服务运行起来,也肯定会自动处理表结构的。

    参考 https://typeorm.bootcss.com/migrations , 手动运行一下 migration 流程。
    wu00
        6
    wu00  
       Jul 31, 2023
    非常常见、最简单、最安全
    kongkx
        7
    kongkx  
       Jul 31, 2023 via iPhone
    用 migration 控制数据库应该不会出现这么问题吧。如果一些特殊的情况不能直接生成 migration ,也应该是在 migration 上面改吧。
    LandCruiser
        8
    LandCruiser  
    OP
       Aug 3, 2023
    @jiangzm
    @Belmode
    @kongkx

    还真是结构没同步,找到问题了,我 TypeOrmModule.forRoot({synchronize:false})了,我看 nest 文档说生产环境要把这个设置为 false ,我怕到时候忘了就直接给改了,结果就不同步了,还是我自己的问题,文档没看全。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1112 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:02 · PVG 07:02 · LAX 16:02 · JFK 19:02
    ♥ Do have faith in what you're doing.