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

问一个低端的 CRUD 的问题

  •  
  •   mulog · 2014-07-17 00:52:30 +08:00 · 3000 次点击
    这是一个创建于 3784 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个困扰了我很久的问题

    假定不使用ORM

    比如说有一个Person,然后有age,name,sex,salary,job...等等一堆属性
    然后做update的时候 能否给定任意个数个属性呢?
    比如说既可以单独update任一个属性,也可以同时update两个(比如给定参数age=33&salary=29999), N个。。
    后台该如何实现?

    我能想到的办法就是 写一句set所有属性的sql。先把要update的这条记录读出来。请求里有给定的属性,使用请求里给的值,否则使用原记录的值。

    但是总是感觉这样无端端多读一次数据库有点浪费,请问是否有更好的办法?
    5 条回复    2014-07-17 11:34:30 +08:00
    fredcc
        1
    fredcc  
       2014-07-17 01:27:27 +08:00   ❤️ 1
    根据属性情况动态合成update sql呗。
    非必须不读取,这是习惯吧
    manhere
        2
    manhere  
       2014-07-17 01:40:54 +08:00   ❤️ 1
    字段都有默认值的情况下,没问题
    zeayes
        3
    zeayes  
       2014-07-17 07:20:20 +08:00   ❤️ 1
    update前把需要更新的属性赋上新值就可以了,sql语句update除了主键外的所有字段,这些字段的值从对象里面获取。
    loading
        4
    loading  
       2014-07-17 08:53:28 +08:00 via Android   ❤️ 1
    目前我还是使用判断post内容然后拼接sql语句的方式,虽然加了防注入的代码,但实现还是不优雅!


    @zeayes 从对象里取的话,也就是有数据库读取的操作吧!例如 age 不需要更新,但你update语句里要写出来,原来的数值必须要select读取出来先。
    zeayes
        5
    zeayes  
       2014-07-17 11:34:30 +08:00   ❤️ 1
    @loading 你的意思是,不做查询,直接通过主键更新某些字段?

    如果是这样的话,那就只有自己根据需要更新的字段拼SQL了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   911 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.