Pulihkan kunci utama indeks

tengah mana yang lebih aman bagi saya untuk memulihkan dan mengurutkan kunci utama indeks, menghindari pembaruan yang tidak perlu di seluruh database? Bisakah Anda menunjukkan contohnya kepada saya?

Saya hanya ingin kunci utama bersifat konstan dan dinamis. Saya hanya ingin kunci utama bersifat pembatas dan dinamis

ps: Basis Data MySQL


         User's Table

|| id_pengguna || nama_pengguna_depan || nama_pengguna_belakang

 #1            Alexandre               Doria
 #2            Ilya                    Bursov
 #3            Anybody                 Anybody

Jadi, jika saya HAPUS baris #2, dan INSERT baris baru, kunci utama baris #3 akan terduplikasi.

Kode PHP saya di sini:

$user_id_cont = mysql_query("pilih 'user_id' dari pengguna"); $user_id = mysql_num_rows($user_id_cont)+1;


person AlexDoria    schedule 10.10.2013    source sumber
comment
kunci utama selalu diurutkan di mysql, apa yang dimaksud dengan pemulihan?   -  person Iłya Bursov    schedule 11.10.2013
comment
Selalu setelah menghapus satu baris, kunci utama diduplikasi. Bagaimana cara agar indeks kunci utama berikutnya sama dengan indeks baris terakhir yang dihapus?   -  person AlexDoria    schedule 11.10.2013
comment
Saya tidak yakin Anda menggunakan terminologi dengan benar, Anda tidak bisa mendapatkan indeks kunci utama berikutnya. Anda bisa mendapatkan nilai kunci utama yang bertambah secara otomatis, kunci yang bertambah secara otomatis tidak diduplikasi jika baris dihapus   -  person Iłya Bursov    schedule 11.10.2013
comment
Dan jika saya memasukkan kolom user_id AUTO_INCREMENT, bagaimana caranya agar indeks tidak melonjak setelah baris dihapus? Saya pikir itu akan lebih mudah   -  person AlexDoria    schedule 11.10.2013
comment
apa yang dimaksud dengan melompat?   -  person Iłya Bursov    schedule 11.10.2013


Jawaban (1)


Menghitung kunci utama seperti yang dilakukan dalam kode Anda benar-benar salah

Pertama-tama - ubah kolom user_id menjadi kunci utama (akan menjadi unik juga), atur juga menjadi auto_increment, sehingga pernyataan pembuatan tabel Anda harus:

create table sample_users (
`user_id` int unsigned not null auto_increment,
`first` varchar(255),
`last` varchar(255),
primary key (`user_id`)
);

selanjutnya, Anda perlu memasukkan data ke dalam tabel Anda, jadi Anda tinggal memasukkannya:

INSERT into `sample_users` (`first`, `last`) values('fname', 'lname');
INSERT into `sample_users` (`first`, `last`) values('fname2', 'lname2');
...

mysql akan menghasilkan user_id yang sesuai untuk setiap baris, dan bahkan jika Anda menghapus beberapa di antaranya - mysql masih akan memberi Anda nilai unik

kasus tambahannya adalah - jika Anda ingin mengetahui id apa yang dihasilkan oleh mysql, Anda dapat menggunakan PHP mysql_insert_id atau MySQL LAST_INSERT_ID berfungsi untuk itu

hanya untuk pemberitahuan: metode yang salah, tetapi ini akan berfungsi untuk "proyek sekolah", ubah kode Anda menjadi:

$user_id_cont = mysql_query("select max('user_id') from user");
$user_id = mysql_fetch_array($user_id_cont, MYSQL_NUM);
$user_id = $user_id[0]+1;
person Iłya Bursov    schedule 10.10.2013