84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
比如我有数据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
小伙看你根骨奇佳,潜力无限,来学PHP伐。
我觉得是设计思路的问题,不应该有这种需求才对,不然如果db的数据很多的话,不是要更新整表了,效率太低
楼主可以说下原始需求,如果是为了排序的话,其实不需要这些值是连续的
不好意思看错了。。
可不可以java里控制,把rownum 赋给rank?
update 表名 set rank = rank - 1 where rank > 删除的rank
这个很难吧。如果你删除的是 a 116 1,怎么办?a 116 2变成 a 116 1,a 116 3变成a 116 2吗?如果同一个组的记录很多,那么就会很多个记录都要修改。
你说的这个需求,应该在代码层面去实现(要开启事务)。第一个需求就相当于说:delete的同时要update,这不科学。
正如以上回答 存在两个问题:第一,你提的这种需求,我觉得是不规范的mysql操作。 要么是需求功能设计有问题,要么是逻辑实现有问题…从数据库规范和安全稳定的角度考虑 不建议你这么做。第二, 真的要去做这种需求,楼上的回答 有提供sql语句去实现 但是使用update操作会锁表 当数据量很大会出现很多问题。还是要将你操作逻辑写到java代码离分离一部分逻辑然后再操作数据库
表逻辑有问题、为什么同一个用户同一个type需要多种rank?
如果rank字段是为了排序的话,你可以在取出来数据之后,在程序里按大小再排序,重新给rank赋值,这样可以不改变数据库,保留原有数据,也避免大量更改数据
我觉得是设计思路的问题,不应该有这种需求才对,不然如果db的数据很多的话,不是要更新整表了,效率太低
楼主可以说下原始需求,如果是为了排序的话,其实不需要这些值是连续的
可不可以java里控制,把rownum 赋给rank?
update 表名 set rank = rank - 1 where rank > 删除的rank
这个很难吧。如果你删除的是 a 116 1,怎么办?a 116 2变成 a 116 1,a 116 3变成a 116 2吗?
如果同一个组的记录很多,那么就会很多个记录都要修改。
你说的这个需求,应该在代码层面去实现(要开启事务)。第一个需求就相当于说:delete的同时要update,这不科学。
正如以上回答 存在两个问题:
第一,你提的这种需求,我觉得是不规范的mysql操作。 要么是需求功能设计有问题,要么是逻辑实现有问题…从数据库规范和安全稳定的角度考虑 不建议你这么做。
第二, 真的要去做这种需求,楼上的回答 有提供sql语句去实现 但是使用update操作会锁表 当数据量很大会出现很多问题。还是要将你操作逻辑写到java代码离分离一部分逻辑然后再操作数据库
表逻辑有问题、为什么同一个用户同一个type需要多种rank?
如果rank字段是为了排序的话,你可以在取出来数据之后,在程序里按大小再排序,重新给rank赋值,这样可以不改变数据库,保留原有数据,也避免大量更改数据