V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
meteor2013
V2EX  ›  PHP

请问有没有比较好的办法在插入 mysql 的时候,把自动生成 id 同时加到另一个字段

  •  
  •   meteor2013 · Oct 15, 2020 via iPhone · 4225 views
    This topic created in 2020 days ago, the information mentioned may be changed or developed.
    谢谢啊

    对了,不用 trigger 实现
    25 replies    2020-10-19 09:34:30 +08:00
    luckyrayyy
        1
    luckyrayyy  
       Oct 15, 2020
    完全想不到这么做的意义....
    meteor2013
        2
    meteor2013  
    OP
       Oct 16, 2020 via iPhone
    @luckyrayyy 兄台,有些时候一言难尽。能否只提供办法
    Jacky23333
        3
    Jacky23333  
       Oct 16, 2020 via Android
    分两步啊
    wsfdljy
        4
    wsfdljy  
       Oct 16, 2020
    建个 view 查询的时候用,然后把 id 那个字段取两个别名。
    wsfdljy
        5
    wsfdljy  
       Oct 16, 2020   ❤️ 1
    非要存两列,可以试下在一个事务里:先 insert,然后 update table set xx=LAST_INSERT_ID() where id = LAST_INSERT_ID();
    只是一个想法,没验证过,你自己试一下。
    lpts007
        6
    lpts007  
       Oct 16, 2020   ❤️ 2
    “一言难尽”的事能具体说说吗,大家对此很好奇。问题本身根本不关心。


    e.g. 我坐地铁前必须把拳头塞进嘴里,但是嘴巴撑得慌,请问大家有什么好办法?
    提出这种问题,不要怪大家问你为什么要塞进嘴里
    lpts007
        7
    lpts007  
       Oct 16, 2020   ❤️ 1
    https://www.v2ex.com/t/685827#reply9


    问题最终怎么解决的,也不回来做记录。再过 100 天又是一贴~
    airqj
        8
    airqj  
       Oct 16, 2020 via Android
    虚拟列也许可以
    GiantHard
        9
    GiantHard  
       Oct 16, 2020 via iPhone
    iminto
        10
    iminto  
       Oct 16, 2020
    很简单,模拟序列就好了
    defage
        11
    defage  
       Oct 16, 2020
    来个存储过程就好了。
    这个在很多需要审计的数据中很常见,DB 一层记录行为,防止有人利用程序干涉数据安全
    defage
        12
    defage  
       Oct 16, 2020
    不用触发器相当于就是要尿尿又不让用 jj
    makia98
        13
    makia98  
       Oct 16, 2020
    用事务啊
    1194129822
        14
    1194129822  
       Oct 16, 2020
    没什么一步方法,LAST_INSERT_ID()线程安全,但是是 connection 连接后上一个插入的自增 id,没插入前还没生成。
    select auto_increment from information_schema.tables where table_schema ='db_name' and table_name='xxx';
    线程不安全,auto_increment connection 共享。
    所以保证原子性,一致性。只能用事务,先插入再更新。
    DavidNineRoc
        15
    DavidNineRoc  
       Oct 16, 2020
    所以说有什么用呢?
    gochat
        16
    gochat  
       Oct 16, 2020
    @lpts007 我说一个我之前看到的很傻的场景,前端要求后端生成分享的 url,一个表里面假设有 id,share_url 两个字段,而 share_url (假设为: https://www.test.com/test/test?id=xxx )中的 GET 参数有个 id 字段,等于当前表里的 id,你在新增表记录的时候,并不知道这个 id 是多少,只能 insert 后再去 update 。
    seanxx
        17
    seanxx  
       Oct 16, 2020
    手动生成,不用自增
    lpts007
        18
    lpts007  
       Oct 16, 2020 via Android
    @gochat 表里存不存 url,前端管的到这个?
    mosliu
        19
    mosliu  
       Oct 16, 2020
    @defage 这个世界上尿尿不用 jj 的还是有一半人的。。。
    想半天。
    gochat
        20
    gochat  
       Oct 16, 2020
    @lpts007 接口读不大到这个 url,那就出出错啊,我说的是这个场景,这个 url 必须你提供,但 url 地址又跟自增 id 有关系,在新增的时候你又不知道 id 是多少,听明白了之间的矛盾了不
    DoUSeeMe
        21
    DoUSeeMe  
       Oct 16, 2020
    @lpts007 #6 虽然我也好奇,但是拳头塞嘴里这个举例有点过了。。。
    lpts007
        22
    lpts007  
       Oct 16, 2020 via Android
    @gochat 表里就是不存,查的时候,接口里处理好给前端,前端不答应?重复网址往数据库里塞是看不起通管局还是公司前端负责表结构?

    我的表达是否清楚?
    gochat
        23
    gochat  
       Oct 16, 2020
    @lpts007 规则都说不定,搞不好还是自定义配置的 url (此时 id 参数不需要),日积月累的,现实还真不是你想的那么简单,所以我说这是很傻的
    lpts007
        24
    lpts007  
       Oct 16, 2020 via Android
    @gochat
    规则都说不定
    谢谢,了解了,舒服了。
    cbasil
        25
    cbasil  
       Oct 19, 2020
    @gochat 分享 url 中 id 字段为什么要用自增 id 呢,手动生成一个唯一字段 share_id,可以根据用户 uid 和时间戳生成,然后查询和 url 中用 share_id 作为参数。就不需要 insert 再去 update 了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   994 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 118ms · UTC 20:12 · PVG 04:12 · LAX 13:12 · JFK 16:12
    ♥ Do have faith in what you're doing.