กู้คืนคีย์หลักของดัชนี

กลางใดที่ปลอดภัยกว่าสำหรับฉันในการกู้คืนและเรียงลำดับคีย์หลักโดยหลีกเลี่ยงการอัพเดตที่ไม่จำเป็นทั่วทั้งฐานข้อมูล คุณช่วยแสดงตัวอย่างให้ฉันดูได้ไหม?

ฉันแค่อยากให้คีย์หลักคงที่และไดนามิก ฉันแค่อยากให้คีย์หลักนั้นมีข้อ จำกัด และไดนามิก

PS. ฐานข้อมูล MySQL


         User's Table

|| user_id || user_first_name || user_last_name

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

ดังนั้น หากฉันลบแถว #2 และแทรกแถวใหม่ คีย์หลักของแถว #3 จะถูกทำซ้ำ

รหัส PHP ของฉันที่นี่:

$user_id_cont = mysql_query("เลือก 'user_id' จากผู้ใช้"); $user_id = mysql_num_rows($user_id_cont)+1;


person AlexDoria    schedule 10.10.2013    source แหล่งที่มา
comment
คีย์หลักจะถูกจัดเรียงใน mysql เสมอ การกู้คืนหมายถึงอะไร   -  person Iłya Bursov    schedule 11.10.2013
comment
หลังจากลบแถวแล้ว คีย์หลักจะถูกทำซ้ำทุกครั้ง วิธีรับดัชนีของคีย์หลักที่ตามมาจะเท่ากับดัชนีของแถวสุดท้ายที่ถูกลบ?   -  person AlexDoria    schedule 11.10.2013
comment
ฉันไม่แน่ใจว่าคุณใช้คำศัพท์อย่างถูกต้อง คุณไม่สามารถรับดัชนีของคีย์หลักที่ตามมาได้ คุณสามารถรับค่าของคีย์หลักที่เพิ่มอัตโนมัติใหม่ได้ โดยที่คีย์ที่เพิ่มอัตโนมัติจะไม่ทำซ้ำหากแถวถูกลบ   -  person Iłya Bursov    schedule 11.10.2013
comment
และถ้าฉันใส่คอลัมน์ user_id AUTO_INCREMENT ฉันควรทำอย่างไรเพื่อไม่ให้ดัชนีกระโดดหลังจากลบแถวแล้ว? ฉันคิดว่ามันน่าจะง่ายกว่า   -  person AlexDoria    schedule 11.10.2013
comment
คุณหมายถึงอะไรโดยการกระโดด?   -  person Iłya Bursov    schedule 11.10.2013


คำตอบ (1)


การคำนวณคีย์หลักเป็นสิ่งที่ผิดอย่างยิ่งเช่นเดียวกับในโค้ดของคุณ

ก่อนอื่น - เปลี่ยนคอลัมน์ user_id ให้เป็นคีย์หลัก (จากนั้นจะไม่ซ้ำกัน) และตั้งค่าเป็น auto_increation ดังนั้นคำสั่งสร้างตารางของคุณต้องเป็น:

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

ต่อไป คุณจะต้องแทรกข้อมูลลงในตารางของคุณ ดังนั้นคุณจึงสามารถแทรกได้:

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

mysql จะสร้าง user_id ที่เหมาะสมสำหรับแต่ละแถว และแม้ว่าคุณจะลบบางส่วนออกไป - mysql ยังคงให้ค่าที่ไม่ซ้ำแก่คุณ

กรณีเพิ่มเติมคือ - หากคุณต้องการทราบว่า mysql สร้าง id ใด คุณสามารถใช้ PHP mysql_insert_id หรือ MySQL LAST_INSERT_ID ฟังก์ชันสำหรับสิ่งนั้น

เพียงแจ้งให้ทราบ: วิธีที่ผิด แต่จะใช้ได้กับ "โครงการโรงเรียน" เปลี่ยนรหัสของคุณเป็น:

$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