Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mereset nomor urut menjadi berurutan?

Jika bidang tersebut adalah kunci utama Anda...

...lalu, seperti yang dinyatakan di tempat lain pada pertanyaan ini, Anda tidak boleh mengubah ID. ID sudah unik dan Anda tidak perlu atau tidak ingin menggunakannya kembali.

Sekarang, katanya...

Jika tidak...

Sangat mungkin Anda memiliki berbeda bidang (yaitu, serta PK) untuk beberapa pemesanan yang ditentukan aplikasi. Selama pengurutan ini tidak melekat pada bidang lain (misalnya jika itu ditentukan oleh pengguna), maka tidak ada yang salah dengan ini.

Anda dapat membuat ulang tabel menggunakan auto_increment (sementara) bidang dan kemudian hapus auto_increment setelah itu.

Saya akan tergoda untuk UPDATE dalam urutan menaik dan menerapkan variabel yang bertambah.

SET @i = 0;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 ORDER BY `myOrderCol` ASC;

Tampaknya cukup sia-sia untuk melakukan ini setiap saat Anda menghapus item, tetapi sayangnya dengan pendekatan pemesanan manual ini, tidak banyak yang dapat Anda lakukan jika Anda ingin mempertahankan integritas kolom.

Anda mungkin dapat mengurangi beban, sehingga setelah menghapus entri dengan myOrderCol sama dengan, katakanlah, 5 :

SET @i = 5;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 WHERE `myOrderCol` > 5
 ORDER BY `myOrderCol` ASC;

Ini akan "mengacak" semua nilai berikut satu per satu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan nilai SQL_CALC_FOUND_ROWS menggunakan pernyataan yang disiapkan?

  2. Apakah mungkin membuat kolom di MySQL dengan ekspresi sebagai nilai default?

  3. Bagaimana cara saya lolos % di Knex di mana seperti kueri?

  4. merekayasa balik database mysql untuk membuat aplikasi Django

  5. Duplikasi UUID MySql BUG