当删除行时,mysql列以数字方式重新排序

时间:2018-07-04 13:15:08

标签: mysql sql

我有一张这样的桌子

id  Bill No   Branches_id
 1    1          1
 2    2          1
 3    3          1
 4    1          2
 5    4          1

用户删除编号为2的帐单时,其他所有记录的bill_no均按数字顺序更新

id  Bill No   Branches_id
 1    1          1
 3    2          1
 4    1          2
 5    3          1

有没有一种简便的方法可以对所有记录进行重新排序而无需以编程方式循环

1 个答案:

答案 0 :(得分:1)

看来id是主键,您想更新每个帐单中的另一列。这可能是合理的。

您可以使用变量:

declare @rn := 0;

update likethis lt
    set bill_no = (@rn := @rn + 1)
    where lt.branches_id = 1
    order by lt.id;

请注意,对该表的所有外部引用都应使用id。如果使用bill_no来连接到另一个表,则不要更改该值(即使使用级联外键),除非这种情况很少发生。