Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào để tự động tăng giá trị của bảng thành giá trị thấp hơn trong MySQL?

Nếu bạn đang sử dụng công cụ InnoDB, thì bạn không thể đặt giá trị auto_increment của bảng thành giá trị thấp hơn. Bạn cần thay đổi công cụ của mình từ InnoDB thành MyISAM.

Lưu ý: MyISAM công cụ cho phép bạn đặt giá trị thấp hơn. Ở đây, chúng tôi đang sử dụng giống nhau.

Theo các tài liệu chính thức:

You cannot reset the counter to a value less than or equal to any that have
already been used. For MyISAM, if the value is less than or equal to the
maximum value currently in the AUTO_INCREMENT column, the value is reset
to the current maximum plus one. For InnoDB, if the value is less than the
current maximum value in the column, no error occurs and the current sequence
value is not changed.

Như được hiển thị ở trên, trong MyISAM, giả sử một số Id đã bị xóa. Sau đó, nếu bạn thêm lại auto_increment, thì các ID sẽ bắt đầu từ giá trị thấp hơn, tức là bắt đầu từ idsremain cuối cùng (sau khi chúng tôi đã xóa một số id).

Đầu tiên chúng ta hãy tạo một bảng với công cụ MyISAM:

mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY)ENGINE='MyISAM';
Query OK, 0 rows affected (0.23 sec)

Sau đây là truy vấn để chèn bản ghi trong bảng bằng cách sử dụng lệnh insert:

mysql> insert into DemoTable values();
Query OK, 1 row affected (0.04 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.02 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.08 sec)

Sau đây là truy vấn để hiển thị các bản ghi từ bảng bằng lệnh select:

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
+----+
6 rows in set (0.00 sec)

Bây giờ, xóa các Id 4,5 và 6:

mysql> delete from DemoTable where Id=4 or Id=5 or Id=6;
Query OK, 3 rows affected (0.06 sec)

Hãy để chúng tôi hiển thị tất cả các bản ghi một lần nữa. Sau đây là truy vấn:

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau sau khi xóa một số Id:

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

Bây giờ, hãy để chúng tôi đặt id auto_increment mới.

Sau đây là truy vấn để đặt giá trị auto_increment thành thấp hơn trong MyISAM engine. Tuy nhiên, giá trị auto_increment hiện tại phải bắt đầu từ 7 nhưng vì chúng tôi đang sử dụng công cụ MyISAM, do đó giá trị được đặt lại thành giá trị tối đa hiện tại, là 3 cộng với một, tức là 3+ 1 =4 sẽ là id mới.

Sau đây là truy vấn:

mysql> alter table DemoTable auto_increment=4;
Query OK, 3 rows affected (0.38 sec)
Records: 3 Duplicates: 0 Warnings: 0

Bây giờ hãy chèn một số bản ghi một lần nữa và sau đó hiển thị tất cả các bản ghi từ bảng để kiểm tra giá trị auto_increment bắt đầu từ 4:

mysql> insert into DemoTable values();
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.02 sec)

Sau đây là truy vấn để hiển thị tất cả các bản ghi từ bảng:

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau. Các id mới bắt đầu từ 4:

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
+----+
6 rows in set (0.00 sec)