请问有没有比较好的办法在插入 mysql 的时候,把自动生成 id 同时加到另一个字段 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
meteor2013
V2EX    PHP

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

  •  
  •   meteor2013 2020-10-15 23:29:18 +08:00 via iPhone 3908 次点击
    这是一个创建于 1870 天前的主题,其中的信息可能已经有所发展或是发生改变。
    谢谢啊

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


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


    问题最终怎么解决的,也不回来做记录。再过 10 天又是一贴~
    airqj
        8
    airqj  
       2020-10-16 07:31:51 +08:00 via Android
    虚拟列也许可以
    GiantHard
        9
    GiantHard  
       2020-10-16 07:58:56 +08:00 via iPhone
    iminto
        10
    iminto  
       2020-10-16 08:42:03 +08:00
    很简单,模拟序列就好了
    defage
        11
    defage  
       2020-10-16 09:36:17 +08:00
    来个存储过程就好了。
    这个在很多需要审计的数据中很常见,DB 一层记录行为,防止有人利用程序干涉数据安全
    defage
        12
    defage  
       2020-10-16 09:37:44 +08:00
    不用触发器相当于就是要尿尿又不让用 jj
    makia98
        13
    makia98  
       2020-10-16 09:59:31 +08:00
    用事务啊
    1194129822
        14
    1194129822  
       2020-10-16 10:45:02 +08:00
    没什么一步方法,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  
       2020-10-16 10:52:37 +08:00
    所以说有什么用呢?
    gochat
        16
    gochat  
       2020-10-16 11:02:05 +08:00
    @lpts007 我说一个我之前看到的很傻的场景,前端要求后端生成分享的 url,一个表里面假设有 id,share_url 两个字段,而 share_url (假设为: https://www.test.com/test/test?id=xxx )中的 GET 参数有个 id 字段,等于当前表里的 id,你在新增表记录的时候,并不知道这个 id 是多少,只能 insert 后再去 update 。
    seanxx
        17
    seanxx  
       2020-10-16 11:21:11 +08:00
    手动生成,不用自增
    lpts007
        18
    lpts007  
       2020-10-16 13:22:03 +08:00 via Android
    @gochat 表里存不存 url,前端管的到这个?
    mosliu
        19
    mosliu  
       2020-10-16 13:34:21 +08:00
    @defage 这个世界上尿尿不用 jj 的还是有一半人的。。。
    想半天。
    gochat
        20
    gochat  
       2020-10-16 14:01:50 +08:00
    @lpts007 接口读不大到这个 url,那就出出错啊,我说的是这个场景,这个 url 必须你提供,但 url 地址又跟自增 id 有关系,在新增的时候你又不知道 id 是多少,听明白了之间的矛盾了不
    DoUSeeMe
        21
    DoUSeeMe  
       2020-10-16 14:06:58 +08:00
    @lpts007 #6 虽然我也好奇,但是拳头塞嘴里这个举例有点过了。。。
    lpts007
        22
    lpts007  
       2020-10-16 14:14:04 +08:00 via Android
    @gochat 表里就是不存,查的时候,接口里处理好给前端,前端不答应?重复网址往数据库里塞是看不起通管局还是公司前端负责表结构?

    我的表达是否清楚?
    gochat
        23
    gochat  
       2020-10-16 14:19:10 +08:00
    @lpts007 规则都说不定,搞不好还是自定义配置的 url (此时 id 参数不需要),日积月累的,现实还真不是你想的那么简单,所以我说这是很傻的
    lpts007
        24
    lpts007  
       2020-10-16 14:22:37 +08:00 via Android
    @gochat
    规则都说不定
    谢谢,了解了,舒服了。
    cbasil
        25
    cbasil  
       2020-10-19 09:34:30 +08:00
    @gochat 分享 url 中 id 字段为什么要用自增 id 呢,手动生成一个唯一字段 share_id,可以根据用户 uid 和时间戳生成,然后查询和 url 中用 share_id 作为参数。就不需要 insert 再去 update 了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1056 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:49 PVG 07:49 LAX 15:49 JFK 18:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86