为了账号安全,请及时绑定邮箱和手机立即绑定

mysql怎样实现,删除一条记录后,排在它之后的记录的rank自动减1

mysql怎样实现,删除一条记录后,排在它之后的记录的rank自动减1

神不在的星期二 2019-03-13 18:14:20
比如我有数据user type ranka 116 1a 116 2a 116 3b 116 1b 116 2我现在删除a,116,2这条记录,我希望a,116,3这条记录的rank会变为2,当我下次再插入a,116记录时,生成的rank为3
查看完整描述

8 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

我觉得是设计思路的问题,不应该有这种需求才对,不然如果db的数据很多的话,不是要更新整表了,效率太低

楼主可以说下原始需求,如果是为了排序的话,其实不需要这些值是连续的


查看完整回答
反对 回复 2019-04-23
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

可不可以java里控制,把rownum 赋给rank?


查看完整回答
反对 回复 2019-04-23
?
RISEBY

TA贡献1856条经验 获得超5个赞

update 表名 set rank = rank - 1 where rank > 删除的rank


查看完整回答
反对 回复 2019-04-23
?
青春有我

TA贡献1784条经验 获得超8个赞

这个很难吧。如果你删除的是 a 116 1,怎么办?a 116 2变成 a 116 1,a 116 3变成a 116 2吗?
如果同一个组的记录很多,那么就会很多个记录都要修改。

查看完整回答
反对 回复 2019-04-23
?
开满天机

TA贡献1786条经验 获得超12个赞

你说的这个需求,应该在代码层面去实现(要开启事务)。第一个需求就相当于说:delete的同时要update,这不科学。


查看完整回答
反对 回复 2019-04-23
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

正如以上回答 存在两个问题:
第一,你提的这种需求,我觉得是不规范的mysql操作。 要么是需求功能设计有问题,要么是逻辑实现有问题…从数据库规范和安全稳定的角度考虑 不建议你这么做。
第二, 真的要去做这种需求,楼上的回答 有提供sql语句去实现 但是使用update操作会锁表 当数据量很大会出现很多问题。还是要将你操作逻辑写到java代码离分离一部分逻辑然后再操作数据库

查看完整回答
反对 回复 2019-04-23
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

表逻辑有问题、为什么同一个用户同一个type需要多种rank?


查看完整回答
反对 回复 2019-04-23
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

如果rank字段是为了排序的话,你可以在取出来数据之后,在程序里按大小再排序,重新给rank赋值,这样可以不改变数据库,保留原有数据,也避免大量更改数据


查看完整回答
反对 回复 2019-04-23
  • 8 回答
  • 0 关注
  • 729 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信