• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dai269619118
V2EX  ›  程序员

关于 mysql 并发查询的问题

  •  
  •   dai269619118 · Aug 15, 2016 · 4182 views
    This topic created in 3572 days ago, the information mentioned may be changed or developed.

    系统插入数据的时候 会给数据一个 order_number 字段来保存这个订单的编号

    编号是自增的 1 , 2 , 3 , 4 这样自增

    每插入一个订单都需要查询出最新插入订单,然后获取这个 order_number 在这个基础上加上 1

    如果同一个时间插入几条数据的时候, order_number 字段会出现重复。

    麻烦大家给个解决思路。

    Supplement 1  ·  Aug 15, 2016
    唯一索引解决不了问题
    每天都是从零开始
    16 replies    2016-08-16 13:31:13 +08:00
    kevin1852
        1
    kevin1852  
       Aug 15, 2016
    建表的时候建成自增字段,自己自增干嘛?
    dear123
        2
    dear123  
       Aug 15, 2016
    1# 说的对
    gdsing
        3
    gdsing  
       Aug 15, 2016
    有自增字段放着不用,这不是没事找事做吗?
    0915240
        4
    0915240  
       Aug 15, 2016
    +1 楼 自增字段
    kisssu
        5
    kisssu  
       Aug 15, 2016 via Android
    加唯一索引,主键和 order number 建立唯一索引
    awanabe
        6
    awanabe  
       Aug 15, 2016
    做个 seq 序号生成器好了, 如果是分布式的不能做自增主键的话
    murmur
        7
    murmur  
       Aug 15, 2016
    每天都是从零开始 这点如果不允许用 mysql 自增或者 oracle 的序列的话 去干死写需求的
    订单号写成 20160815xxxxxxx 不就完了 非得从 1 开始?
    murmur
        8
    murmur  
       Aug 15, 2016
    有点看错了
    ( 1 )订单号是不是必须从 1 开始 不是的话就用一个自增序列 mod 一个大数就可以了 需求什么的 编号什么的是可以商量的
    ( 2 ) oracle sequence 爽啊 这个可以重置序列的
    ( 3 )分布式的主键生成器 自己弄一个 java 的话好像有 atomic integer
    BOYPT
        9
    BOYPT  
       Aug 15, 2016
    记录当天的 start_id ,然后用自增 key 减去这个 id 不就有 order_id 了,有这么复杂么
    chaegumi
        10
    chaegumi  
       Aug 15, 2016
    mysql insert delayed into
    3dwelcome
        11
    3dwelcome  
       Aug 15, 2016
    自增+LAST_INSERT_ID()
    SoloCompany
        12
    SoloCompany  
       Aug 16, 2016
    1. 数据库有锁
    2. 谁说 unique key 不能解决重复问题的,起码你加一个 order_date, order_number 的 unique key 就能解决重复问题(假如你并发没控制好的话就直接数据库出错)
    3. mysql 支持复合 key 的 auto_increment, 但仅限于 MyISAM ,如果你的数据库场景可以使用 MyISAM 的话,这是一个最简单的解决方案
    Mirana
        13
    Mirana  
       Aug 16, 2016
    弄个分布式锁,或者弄个发号器
    songw123
        14
    songw123  
       Aug 16, 2016   ❤️ 1
    做个序号生成器吧,完全自增也不太靠谱, order_number 如果是订单 ID 的话,是有业务意义的,直接自增会带来安全隐患
    beneo
        15
    beneo  
       Aug 16, 2016
    redis 来个自增数 num ,然后 2 << num 不就好了
    beneo
        16
    beneo  
       Aug 16, 2016
    我以为是 1 , 2 , 4 , 8 看错了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   960 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 19:23 · PVG 03:23 · LAX 12:23 · JFK 15:23
    ♥ Do have faith in what you're doing.