Bạn có thể chọn ID như vậy:
set @rank = 0; select id, @rank:=@rank+1 from tbl order by idKết quả là một danh sách các ID và vị trí của chúng trong chuỗi.
Bạn cũng có thể đặt lại ID như vậy:
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank;Bạn cũng có thể chỉ in ra ID chưa sử dụng đầu tiên như vậy:
select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c;Sau mỗi lần chèn, bạn có thể đặt lại auto_increment:
alter table tbl auto_increment = 16hoặc đặt rõ ràng giá trị ID khi thực hiện chèn:
insert into tbl values (16, 'something');Thông thường, điều này không cần thiết, bạn có set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 8 và khả năng tạo số xếp hạng trong các bộ kết quả của bạn. Một bảng xếp hạng điển hình có thể là:
set @rank = 0; select a.name, a.amount, b.rank from cust a, (select amount, @rank:=@rank+1 as rank from cust order by amount desc) b where a.amount = b.amountKhách hàng được xếp hạng theo số tiền chi tiêu.
Đôi khi các mục gần đây nhất bị xóa khỏi bảng của chúng tôi. Sau khi các hàng bị xóa, hãy thử chèn một số hàng. Chúng ta có thể quan sát một khoảng cách trong số number_values của cột Auto_increment, trong nhiều trường hợp ổn. Tuy nhiên, nhiều lần yêu cầu là thiết lập lại tự động_increment để duy trì trình tự. Vâng, có một giải pháp cho cùng. Hãy cho chúng tôi hiểu thông qua một ví dụ. Giả sử rằng chúng tôi có bảng Sales_Data với các mục dưới đây.
Chúng tôi sẽ xóa hai hàng cuối cùng từ bảng sales_data và sau đó chèn một hàng mới và cuối cùng chọn * vào sales_data. Quan sát các truy vấn dưới đây cho cùng.
DELETE FROM sales_data WHERE sale_person_id > 4; INSERT INTO sales_data (sale_person_name,commission_percentage,no_products_sold) VALUES("Rani",15,5000); SELECT * FROM sales_data;Đầu ra:-
Như chúng ta có thể thấy rằng vì hai hàng có giá trị sale_person_id ’5, và 6, đã bị xóa, hàng mới được chèn có ID‘ 7. Để tránh hành vi này, chúng ta hãy viết một truy vấn khác, như hình dưới đây.
Quảng cáo
ALTER TABLE sales_data AUTO_INCREMENT=1;Hãy để chúng tôi lặp lại lần chèn sau khi xóa các hàng và xem đầu ra kết quả sẽ như trong bên dưới Hình 1.3
Như chúng ta có thể thấy, trình tự được duy trì và hàng mới có giá trị sale_person_id là ‘5, thay vì‘ 7.
To know all about How to reset auto_increment in MySQL read through RESET AUTO_INCREMENT in MYSQL.Tóm tắt: Trong hướng dẫn này, chúng tôi & NBSP; Sẽ hiển thị cho bạn nhiều cách khác nhau để đặt lại các giá trị tự động của các cột set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 9 trong MySQL.: in this tutorial, we will show you various ways to reset auto-increment values of set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 9 columns in MySQL.
MySQL cung cấp cho bạn một tính năng hữu ích gọi là tự động tăng. Bạn có thể gán thuộc tính set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 9 cho một cột của bảng để tạo một danh tính duy nhất cho hàng mới. Thông thường, bạn sử dụng thuộc tính set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 9 cho cột khóa chính của bảng.
Bất cứ khi nào bạn chèn một hàng mới vào bảng, MySQL tự động & nbsp; gán số thứ tự cho cột set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 9.
Ví dụ: nếu bảng có tám hàng và bạn chèn một hàng mới mà không chỉ định giá trị cho cột tự động, MySQL sẽ tự động chèn một hàng mới với giá trị select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 3 9.
Đôi khi, bạn có thể cần đặt lại giá trị của cột tự động để nhận dạng bản ghi đầu tiên mà bạn chèn vào bảng bắt đầu từ một số cụ thể, ví dụ: 1.
Trong MySQL, bạn có thể đặt lại các giá trị tăng tự động theo nhiều cách khác nhau.
MySQL đặt lại giá trị gia tăng tự động
Đầu tiên, hãy tạo một bảng có tên & nbsp; ________ 24 & nbsp; và & nbsp; gán thuộc tính & nbsp; ________ 19 cho & nbsp; ________ 23 & nbsp; cột khóa chính.
CREATE TABLE tmp ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(45) DEFAULT NULL, PRIMARY KEY (id) );
Code language: SQL (Structured Query Language) (sql)Thứ hai, chèn một số dữ liệu mẫu vào bảng select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 4 & NBSP;
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 0Thứ ba, truy vấn bảng select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 4 & nbsp; để xác minh hoạt động chèn:
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 1 Chúng tôi có ba hàng có giá trị của cột ID là 1, 2 và 3. Hoàn hảo! Đã đến lúc thực hành đặt lại giá trị tự động của cột ID.We have three rows with values of ID column are 1, 2, and 3. Perfect! It is time to practice reset the auto-increment value of the ID column.
Sử dụng câu lệnh ALTER BẢNG
Bạn có thể đặt lại giá trị tự động bằng cách sử dụng câu lệnh select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 9. Cú pháp của câu lệnh select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 9 & nbsp; để đặt lại giá trị gia tăng tự động & nbsp; như sau:
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 2Bạn chỉ định tên bảng sau mệnh đề select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 9 và alter table tbl auto_increment = 16 2 mà & nbsp; bạn muốn đặt lại trong biểu thức alter table tbl auto_increment = 16 3.
Lưu ý rằng alter table tbl auto_increment = 16 2 phải lớn hơn hoặc bằng giá trị tối đa hiện tại của cột tự động.
Hãy để xóa bản ghi cuối cùng trong bảng select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 4 & NBSP; với ________ 23 & nbsp; Giá trị 3:
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 3Nếu bạn chèn một hàng mới, MySQL sẽ gán 4 cho & nbsp; ____ 23 cột & nbsp; của hàng mới. Tuy nhiên, bạn có thể đặt lại số được tạo bởi MySQL thành 3 bằng cách sử dụng câu lệnh select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 9 & NBSP;
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 4Bây giờ, hãy để cố gắng chèn một hàng mới vào select min(id) as next_id from ((select a.id from (select 1 as id) a left join tbl b on a.id = b.id where b.id is null) union (select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id where b.id is null)) c; 4 & nbsp; bảng & nbsp; và dữ liệu truy vấn từ nó & nbsp; để xem hiệu ứng:
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 5 Chúng tôi có ba hàng có giá trị tăng tự động cuối cùng là 3 thay vì 4, đó là những gì chúng tôi mong đợi.We have three rows with the last auto-increment value is 3 instead of 4, which is what we expected.
Sử dụng câu lệnh bảng cắt ngắn
Tuyên bố bảng cắt tỉa xóa tất cả các dữ liệu khỏi bảng và đặt lại & nbsp; giá trị tự động tăng lên bằng không.
Sau đây minh họa cú pháp của câu lệnh insert into tbl values (16, 'something'); 0 & NBSP;
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 6Bằng cách sử dụng câu lệnh insert into tbl values (16, 'something'); 0 & NBSP;, bạn xóa tất cả dữ liệu khỏi bảng vĩnh viễn và đặt lại giá trị tự động có độ tự động về 0.
Sử dụng Drop & nbsp; bảng và tạo các câu lệnh bảng
Bạn có thể sử dụng một cặp câu lệnh: DROP TABLE và tạo bảng để đặt lại cột tự động. Lưu ý rằng phương pháp này xóa tất cả dữ liệu khỏi bảng vĩnh viễn.
Giống như câu lệnh insert into tbl values (16, 'something'); 0 & nbsp;, các câu lệnh đó sẽ giảm bảng & nbsp; và tạo lại nó, do đó, giá trị của việc tự động được đặt lại về 0.
set @rank = 0; update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b on a.id = b.id set a.id = b.rank; 7Trong hướng dẫn này, bạn đã học được cách thiết lập lại giá trị tự động trong MySQL theo nhiều cách khác nhau. Cách đầu tiên là thích hợp hơn vì nó là cách dễ nhất và không có tác dụng phụ.
Hướng dẫn này có hữu ích không?