Hướng dẫn how to reset auto increment in mysql after delete - cách đặt lại tăng tự động trong mysql sau khi xóa

Bạn có thể chọn ID như vậy:

set @rank = 0;
select id, @rank:=@rank+1 from tbl order by id

Kế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 = 16

hoặ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.amount

Khá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.

Hướng dẫn how to reset auto increment in mysql after delete - cách đặt lại tăng tự động trong mysql sau khi xóa
Hình 1.1

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:-

Hướng dẫn how to reset auto increment in mysql after delete - cách đặt lại tăng tự động trong mysql sau khi xóa
Hình 1.2

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

Hướng dẫn how to reset auto increment in mysql after delete - cách đặt lại tăng tự động trong mysql sau khi xóa
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;
0

Thứ 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.
Hướng dẫn how to reset auto increment in mysql after delete - cách đặt lại tăng tự động trong mysql sau khi xóa

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;
2

Bạ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;
3

Nế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;
4

Bâ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.
Hướng dẫn how to reset auto increment in mysql after delete - cách đặt lại tăng tự động trong mysql sau khi xóa

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;
6

Bằ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;
7

Trong 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?

Làm thế nào để tôi thực hiện tăng tự động bắt đầu từ 1 một lần nữa?

Thay đổi nhà cung cấp Auto_increment = 1;Ví dụ này sẽ thay đổi giá trị tiếp theo trong trường Tự động_increment (tức là: Giá trị tiếp theo trong chuỗi) thành 1 cho cột Nhà cung cấp_id trong bảng Nhà cung cấp. This example would change the next value in the AUTO_INCREMENT field (ie: next value in the sequence) to 1 for the supplier_id column in the suppliers table.

Làm thế nào để bạn ngăn chặn sự gia tăng tự động được đặt lại khi bạn xóa tất cả hàng của bảng?

Bạn sử dụng bảng trancate để làm trống bàn.Cắt ngắn không chỉ xóa các hàng mà còn đặt lại giá trị gia tăng tự động theo thiết kế.Sử dụng xóa từ bảng thay thế.Use DELETE FROM table instead.

Cái nào sẽ đặt lại các cột gia tăng tự động?

Để đặt lại cột tự động, sử dụng lệnh bảng cắt ngắn.Sau đó, khi chèn, nó sẽ đặt lại cột.TRUNCATE TABLE command. After that, on insertion, it will reset the column.

Có đặt lại bảng cắt giảm tự động tăng lên?

Câu lệnh bảng cắt ngắn trong MySQL hoàn toàn xóa dữ liệu của bảng mà không cần xóa cấu trúc của bảng và luôn đặt lại giá trị cột tự động có độ tự động.always resets the auto-increment column value to zero.