V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LandCruiser
V2EX  ›  程序员

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

  •  
  •   LandCruiser · 274 天前 · 966 次点击
    这是一个创建于 274 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    还真是结构没同步,找到问题了,我 TypeOrmModule.forRoot({synchronize:false})了,我看 nest 文档说生产环境要把这个设置为 false ,我怕到时候忘了就直接给改了,结果就不同步了,还是我自己的问题,文档没看全。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3041 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 10:38 · PVG 18:38 · LAX 03:38 · JFK 06:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.