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.