Gần đây tôi đã gặp sự cố trường id của loại bộ sưu tập không được đặt lại sau khi tất cả mục nhập đã bị xóa. ví dụ tôi có 2 bài viết có 2 id tương ứng 1 ,2 nhưng sau khi tôi xóa nó và tạo một bài viết mới id vẫn giữ nguyên [ nó bắt đầu từ 3 thay vì đặt lại về 1 ]. Làm thế nào tôi có thể giải quyết vấn đề này, đó có phải là vấn đề về cơ sở dữ liệu không?
Hướng dẫn MySQL này giải thích cách đặt lại trình tự bằng thuộc tính AUTO_INCREMENT trong MySQL với cú pháp và ví dụ
Sự miêu tả
Bạn có thể đặt lại giá trị tiếp theo được chỉ định bởi AUTO_INCREMENT bất kỳ lúc nào bằng cách sử dụng câu lệnh ALTER TABLE trong MySQL
cú pháp
Trong MySQL, cú pháp để đặt lại cột AUTO_INCREMENT bằng câu lệnh ALTER TABLE là
ALTER TABLE table_name AUTO_INCREMENT = value;table_nameTên của bảng có cột AUTO_INCREMENT mà bạn muốn đặt lại. valueGiá trị tiếp theo sẽ được sử dụng trong cột AUTO_INCREMENT
Ví dụ
Hãy xem một ví dụ về cách đặt lại giá trị tiếp theo được gán cho cột AUTO_INCREMENT trong bảng trong MySQL
Ví dụ: nếu chúng tôi có một bảng nhà cung cấp được xác định như sau
CREATE TABLE suppliers [ supplier_id INT[11] NOT NULL AUTO_INCREMENT, supplier_name VARCHAR[50] NOT NULL, account_rep VARCHAR[30] NOT NULL DEFAULT 'TBD', CONSTRAINT suppliers_pk PRIMARY KEY [supplier_id] ];
Chúng ta có thể đặt lại giá trị tiếp theo trong chuỗi cho trường supply_id [là trường AUTO_INCREMENT trong bảng nhà cung cấp] bằng câu lệnh ALTER TABLE sau
ALTER TABLE suppliers AUTO_INCREMENT = 1;
Ví dụ này sẽ thay đổi giá trị tiếp theo trong trường AUTO_INCREMENT [nghĩa 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. Bây giờ khi một bản ghi mới được chèn vào bảng nhà cung cấp, cột supply_id sẽ được gán giá trị là 1 trong bản ghi mới được tạo
TIỀN BOA. Vì chỉ có thể có một trường AUTO_INCREMENT trong một bảng nên bạn chỉ cần chỉ định tên bảng [chứ không phải tên trường] trong câu lệnh ALTER TABLE khi đặt lại giá trị tiếp theo trong chuỗi
Để đặt lại khóa chính về 1 sau khi xóa dữ liệu, hãy sử dụng cú pháp sau
alter table yourTableName AUTO_INCREMENT=1; truncate table yourTableName;
Sau khi thực hiện hai bước trên, bạn sẽ nhận được khóa chính bắt đầu từ 1
Để hiểu khái niệm trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau
mysql> create table resettingPrimaryKeyDemo -> [ -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY -> ]; Query OK, 0 rows affected [0.66 sec]
Chèn một số bản ghi vào bảng bằng lệnh chèn. Truy vấn như sau -
mysql> insert into resettingPrimaryKeyDemo values[]; Query OK, 1 row affected [0.15 sec] mysql> insert into resettingPrimaryKeyDemo values[]; Query OK, 1 row affected [0.10 sec] mysql> insert into resettingPrimaryKeyDemo values[]; Query OK, 1 row affected [0.08 sec] mysql> insert into resettingPrimaryKeyDemo values[]; Query OK, 1 row affected [0.12 sec]
Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh chọn. Truy vấn như sau -
mysql> select *from resettingPrimaryKeyDemo;
Sau đây là đầu ra
+--------+ | UserId | +--------+ | 1 | | 2 | | 3 | | 4 | +--------+ 4 rows in set [0.00 sec]
Đây là truy vấn để đặt lại khóa chính thành 1
________số 8Kiểm tra các bản ghi từ bảng. Truy vấn như sau -
mysql> select *from resettingPrimaryKeyDemo; Empty set [0.00 sec]
Chèn một số bản ghi từ bảng bằng lệnh chèn. Truy vấn như sau -
CREATE TABLE suppliers [ supplier_id INT[11] NOT NULL AUTO_INCREMENT, supplier_name VARCHAR[50] NOT NULL, account_rep VARCHAR[30] NOT NULL DEFAULT 'TBD', CONSTRAINT suppliers_pk PRIMARY KEY [supplier_id] ];0
Bây giờ hãy kiểm tra khóa chính của bảng bắt đầu từ 1. Truy vấn như sau -
mysql> select *from resettingPrimaryKeyDemo;
Sau đây là đầu ra
CREATE TABLE suppliers [ supplier_id INT[11] NOT NULL AUTO_INCREMENT, supplier_name VARCHAR[50] NOT NULL, account_rep VARCHAR[30] NOT NULL DEFAULT 'TBD', CONSTRAINT suppliers_pk PRIMARY KEY [supplier_id] ];2