Nếu trường là khóa chính của bạn ...
... thì, như đã nêu ở phần khác về câu hỏi này, bạn không nên thay đổi ID. Các ID đã là duy nhất và bạn không cần cũng không muốn sử dụng lại chúng.
Bây giờ, điều đó nói rằng ...
Nếu không ...
Rất có thể bạn có một khác (nghĩa là, cũng như PK) cho một số thứ tự do ứng dụng xác định. Miễn là thứ tự này không có trong một số trường khác (ví dụ:nếu nó do người dùng xác định), thì không có gì sai với điều này.
Bạn có thể tạo lại bảng bằng auto_increment
(tạm thời) và sau đó xóa auto_increment
sau đó.
Tôi muốn UPDATE
theo thứ tự tăng dần và áp dụng một biến tăng dần.
SET @i = 0;
UPDATE `table`
SET `myOrderCol` = @i:[email protected]+1
ORDER BY `myOrderCol` ASC;
Có vẻ như khá lãng phí khi làm điều này mọi lúc bạn xóa các mục, nhưng rất tiếc với cách sắp xếp theo thứ tự thủ công này, bạn không thể làm gì nhiều nếu muốn duy trì tính toàn vẹn của cột.
Bạn có thể giảm tải, chẳng hạn như sau khi xóa mục nhập bằng myOrderCol
bằng, giả sử, 5
:
SET @i = 5;
UPDATE `table`
SET `myOrderCol` = @i:[email protected]+1
WHERE `myOrderCol` > 5
ORDER BY `myOrderCol` ASC;
Thao tác này sẽ "xáo trộn" tất cả các giá trị sau xuống từng giá trị một.