30/09/2018, 20:46
chèn mã vào vị trí đã xoa trong Mysql và PHP
Cho em hỏi là trong MySQL & php,
em sử dụng mã tự động tăng, nhưng sau khi xóa 1 dòng thì mã đó tiếp tục tăng, trong khi đó những vị trí đã xóa thì nó bị trống.
VD: Nếu xóa id = 2 thì dãy số nó như sau:
ID: 1 3 4 5 6
Vậy cho em hỏi là sao để khi insert vô thì nó tự hiểu và chèn vào vị trí còn trống??
Em cảm ơn!
Bài liên quan
Thực ra thì id mà MySQL lưu trữ chỉ nên dùng là reference trong nội bộ database mà thôi. Nghĩa là, nó khuyết vị trí số 2 cũng không có sao, đâu có ảnh hưởng tới dữ liệu đâu nhỉ ^^ Còn nếu muốn insert vào id =2 thì bạn dùng câu lệnh INSERT INTO tbl_name(id,…) VALUE (2, …) thì dãy sẽ liên tục.
Tuy nhiên, MySQL kể cả khi không phải id=2 (giả sử id=7) thì nó vẫn lưu trữ cái id=7 này đè vào cái record id=2 đấy. Thế nên, nếu dùng câu lệnh SELECT mà không có SORT BY ID thì nó sẽ là 1 7 3 4 5 6. (để tránh tình trạng này, bạn phải defragment MYSQL)
Thực chất thì mình làm mã là tự động tăng, nen khi xoá một id thì nó sẽ bị khuyết mã đó. Mà thầy của mình yêu cầu là làm cho id tự động tăng đó, tự động chèn số bị khuyết vào. Mà mình khong ngĩ được cách giải quyết. Mình còn non vè php nen mong mọi người chỉ
Yêu cầu của thầy bạn hơi … khó hiểu. Nếu quản lý một cái gì đó, ví dụ như Product thì nó có mã SKU, hay sinh viên thì có mã SID, Book thì có mã ISBN … Mấy cái này độc lập với id của CSDL, chứ cần gì phải liên tục.
Đừng cho nó tự tăng trong MySQL mà ta tự tăng và chèn vào bằng PHP thôi. Lý do cho nó tự tăng mà khi xoá đi ta lại chèn vào chỗ trống thì không hiểu tại sao lạ có suy nghĩ như vậy. Mục đích nó tự tăng là để ta biết có bao nhiêu biểu ghi từng được tạo ra từ trước đến nay.
Cách giải quyết hoặc là không cho phép tự tăng hoặc là lảm ra một cột khác.