Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để đặt lại các số thứ tự để trở nên liên tiếp?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn và truy xuất hình ảnh vào mysql thông qua python

  2. Độ chính xác số cao trôi nổi với MySQL và SQLAlchemy ORM

  3. Kết quả group_concat không hoạt động trong điều kiện IN

  4. Mật khẩu không được xác minh bằng cách sử dụng hàm password_verify

  5. Vấn đề về Django và mysql trên Mavericks