Saya memiliki tabel MySQL dengan kunci primer kenaikan otomatis. Saya menghapus beberapa baris di tengah meja. Sekarang saya memiliki, misalnya, sesuatu seperti ini di kolom ID: 12, 13, 14, 19, 20. Saya menghapus 15, 16, 17 dan 18 baris.
Saya ingin menetapkan ulang / mengatur ulang / menyusun ulang kunci utama sehingga saya memiliki kontinuitas, yaitu membuat 19 menjadi 15, 20 menjadi 16, dan seterusnya.
Bagaimana saya bisa melakukannya?
Meskipun pertanyaan ini tampaknya sudah sangat lama, akan memposting jawaban untuk seseorang yang mencari di sini.
Jika kolom digunakan sebagai kunci asing di tabel lain, pastikan Anda menggunakan
ON UPDATE CASCADE
alih-alih defaultON UPDATE NO ACTION
untuk hubungan kunci asing di tabel tersebut.Selanjutnya, untuk mengatur ulang
AUTO_INCREMENT
hitungan, Anda dapat segera mengeluarkan pernyataan berikut.Untuk MySQL, nilai itu akan disetel ulang menjadi
MAX(id) + 1
.sumber
.
id` = @count: = @count + 1`. Dari dokumentasi: "Nilai di sisi kanan mungkin nilai literal, variabel lain yang menyimpan nilai, atau ekspresi hukum apa pun yang menghasilkan nilai skalar"Untuk mengatur ulang ID tabel Pengguna saya, saya menggunakan query SQL berikut. Dikatakan di atas bahwa ini akan merusak hubungan yang mungkin Anda miliki dengan tabel lain.
sumber
Anda dapat menggunakan kueri ini
sumber
Saya pikir ini akan melakukannya
sumber
Atau, dari PhpMyAdmin, hapus bendera "AutoIncrement", simpan, atur lagi dan simpan. Ini akan mengatur ulang.
sumber
jika Anda menghendaki
order by
sumber
dalam phpmyadmin
goto meja Anda-> klik menu operasi-> opsi tabel goto-> ubah AUTO_INCREMENT menjadi tidak dari tempat Anda ingin memulai.
peningkatan otomatis tabel Anda dimulai dari no itu.
Cobalah.
sumber
Anda bisa menghapus fungsi kenaikan otomatis kunci utama kolom itu, lalu setiap kali Anda memperbarui kolom itu jalankan kueri sebelumnya yang akan menghitung semua baris dalam tabel, lalu jalankan loop yang beralih melalui penghitungan baris yang memasukkan setiap nilai ke dalam baris masing-masing, dan akhirnya jalankan kueri yang menyisipkan baris baru dengan nilai kolom itu menjadi jumlah total baris ditambah satu. Ini akan bekerja dengan sempurna dan merupakan solusi paling absolut untuk seseorang yang berusaha mencapai apa Anda. Berikut adalah contoh kode yang dapat Anda gunakan untuk fungsi:
Di sini saya membuat array asosiatif yang telah saya tambahkan pada kolom peringkat dengan kueri dalam kueri pemilihan, yang memberi setiap baris nilai peringkat dimulai dengan 1. Saya kemudian mengulangi melalui array asosiatif.
Opsi lain adalah untuk mendapatkan jumlah baris, menjalankan kueri pemilihan dasar, mendapatkan array asosiatif dan mengulanginya melalui cara yang sama tetapi dengan variabel tambahan yang diperbarui melalui setiap iterasi. Ini kurang fleksibel tetapi akan mencapai hal yang sama.
sumber
untuk InnoDB, lakukan ini (ini akan menghapus semua catatan dari sebuah tabel, buat bakcup terlebih dahulu):
sumber
Saya memiliki keraguan yang sama, tetapi tidak dapat membuat perubahan apa pun di atas meja, saya memutuskan melakukan yang berikut setelah melihat ID saya tidak melebihi jumlah maksimum yang tersimpan dalam variabel @count:
Solusi diperlukan, tetapi aman dan itu perlu karena meja saya memiliki kunci asing dengan data di tabel lain.
sumber
Pilihan terbaik adalah mengubah kolom dan menghapus atribut auto_increment. Kemudian keluarkan pernyataan perubahan lain dan kembalikan auto_increment ke kolom. Ini akan mereset penghitungan ke maksimum +1 baris saat ini dan dengan demikian mempertahankan referensi kunci asing kembali ke tabel ini, dari tabel lain di database Anda, atau penggunaan kunci lain untuk kolom itu.
sumber
Pendapat saya adalah membuat kolom baru bernama row_order. kemudian susun ulang kolom itu. Saya tidak menerima perubahan pada kunci utama. Sebagai contoh, jika kolom pesanan adalah banner_position, saya telah melakukan sesuatu seperti ini, Ini untuk menghapus, memperbarui, membuat kolom posisi banner. Panggil fungsi ini mengatur ulang mereka masing-masing.
sumber
Ini berfungsi - https://stackoverflow.com/a/5437720/10219008.....tapi jika Anda mengalami masalah 'Kode Kesalahan: 1265. Data terpotong untuk kolom' id 'di baris 1' ... Kemudian jalankan pengikut. Menambahkan abaikan pada permintaan pembaruan.
sumber
Anda juga bisa menghindari menggunakan ID numerik sebagai Kunci Utama. Anda dapat menggunakan kode Negara sebagai id utama jika tabel berisi informasi negara, atau Anda dapat menggunakan permalinks, jika itu berisi artikel misalnya.
Anda juga bisa menggunakan nilai acak, atau MD5. Semua opsi ini memiliki manfaatnya sendiri, khususnya pada detik IT. ID numerik mudah dihitung.
sumber