Mysql问题,创建唯一ID

@Ta 2022-11-11 9123点击
现有一张表,名(topic)
id tid sid title content 

id为自增,现在需要创建一个基于sid的自增id,如下图所示

第一条数据
id(1),sid(1),tid(T_1),title(标题),content(内容)
第二条数据
id(2),sid(1),tid(T_2),title(标题),content(内容)
第三条数据
id(3),sid(1),tid(T_3),title(标题),content(内容)
第四条数据
id(4),sid(2),tid(T_1),title(标题),content(内容)
第五条数据
id(5),sid(2),tid(T_2),title(标题),content(内容)


一般来说tid
SELECT COUNT(sid) FROM topic
就能得到sid发布内容的数量
然后结果+1,即可

但是这样有概率会重复(我猜的),也不能删除数据,如果删除第四条再插入就会变成tid = T_2

或者用子SQL

用MAX(tid)然后在。。。。

想不通
回复列表(8|隐藏机器人聊天)
  • @Ta / 2022-11-11 / /
    所以问题就在于你这个id又不能用自增,也不能用雪花id或者uuid!
    不过有个简单的方法就是数据不能真的删除,做个逻辑删除,但实际上这条数据还在数据库只不过被标记为删除,不展示出来。加个字段delete来标记即可,count的时候被标记为删除的也统计进去!!!
  • @Ta / 2022-11-11 / /
    不过显然使用count数量+1作为新id是不合理的,删除必然会导致重复,,比如添加了3条数据 T1,T2,T3此时删除T2数据,在次Count + 1插入的数据必然是T3,和已有的重复!
  • @Ta / 2022-11-11 / /

    看不懂这是个啥需求啊。。

  • @Ta / 2022-11-12 / /
    插入数据之前还要查询一下会不会很废性能?
  • @Ta / 2022-11-12 / /

    先说一个反向思路,直接新增几十万空数据,sid直接完成分配,新增内容的时候取一条空内容的数据update
    另一个方法相对简单,用触发器

  • @Ta / 2022-11-12 / /

    同一楼,只增不删!
    在这里,每天60秒读懂世界!

  • @Ta / 2022-11-20 / /
    首先,重复是有可能的。我觉得的解决方法是:可不可以将sid和自增的id用某种算法关联起来,因为id具有自增唯一性,如果将其以某种方式关联起来,那肯定也是唯一值了
  • @Ta / 2022-11-26 / /
    和我之前想的差不多,把sid作为自增就好了,ID作为字段即可 
    yourTail
添加新回复
回复需要登录