Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách đọc và đặt lại AUTO_INCREMENT trong MySQL

Hướng dẫn này cung cấp truy vấn để đặt lại AUTO_INCREMENT trong MySQL bằng Bảng InnoDB. Nó chỉ ra cách cập nhật thuộc tính AUTO_INCREMENT của Bảng InnoDB.

Biện pháp phòng ngừa

Không sử dụng lệnh ALTER trên các bảng có dữ liệu lớn. MySQL mất nhiều thời gian để cập nhật bảng trong trường hợp kích thước bảng lớn.

Lệnh ALTER chỉ nên được sử dụng khi thực sự cần thiết.

Không thể gán AUTO_INCREMENT với giá trị thấp hơn giá trị tối đa hiện có.

Tạo cơ sở dữ liệu và bảng

Trong phần này, chúng tôi sẽ tạo cơ sở dữ liệu và bảng được sử dụng để cập nhật thuộc tính AUTO_INCREMENT.

# Create the Database
CREATE SCHEMA `autoinc` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# Create the Table
CREATE TABLE `autoinc`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(100) NOT NULL,
`lastName` VARCHAR(100) NULL,
`username` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));

Để minh họa các hoạt động AUTO_INCREMENT, chúng tôi sẽ chèn một vài hàng như hình dưới đây.

# Insert Rows
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('John', 'Dave', 'johndave007');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Vijay', 'Mallik', 'mallikvijay');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Ricky', 'Walker', 'rickyhunt');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Vikas', 'Roy', 'vikasroy');

AUTO_INCREMENT Đọc ví dụ

 

Chúng tôi có thể lấy giá trị AUTO_INCREMENT hiện tại cho bất kỳ bảng nào bằng cách sử dụng truy vấn như được hiển thị bên dưới. Nó có thể không phản ánh đúng giá trị vì INFORMATION_SCHEMA hiển thị giá trị gần đúng có thể không phải là giá trị thực.

# Syntax
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<database>' AND TABLE_NAME = '<table>';

# Example
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoinc' AND TABLE_NAME = 'user';

# Result
---------------
AUTO_INCREMENT
---------------
5

Bây giờ, hãy đợi một phút và thực hiện các truy vấn được đề cập bên dưới.

INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values( 'Nick', 'Jones', 'nick' );

SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoinc' AND TABLE_NAME = 'user';

# Result
---------------
AUTO_INCREMENT
---------------
5

Nó vẫn hiển thị giá trị AUTO_INCREMENT là 5, nhưng giá trị mong đợi là 6. Đây là ý tôi với một giá trị gần đúng.

Chúng tôi cũng có thể gọi hàm LAST_INSERT_ID để lấy AUTO_INCREMENT giá trị ít hơn một ngay sau khi thực hiện truy vấn INSERT. Có thể không phải là cách tốt nhất để nhận giá trị AUTO_INCREMENT bằng LAST_INSERT_ID trong hầu hết các trường hợp, đặc biệt là trong sản xuất.

# Example
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Nicolas', 'Dave', 'nicolas' );
SELECT LAST_INSERT_ID() as `id`;

# Result
---------------
id
---------------
6

Sau khi thực hiện các truy vấn trên, giá trị AUTO_INCREMENT mong đợi là 7 và việc gọi LAST_INSERT_ID () hiển thị 6 là đúng, nhưng có thể không lý tưởng nếu sử dụng LAST_INSERT_ID () để nhận giá trị AUTO_INCREMENT.

Một cách khác để lấy giá trị AUTO_INCREMENT là sử dụng lệnh SHOW như hình dưới đây. Nó cũng hiển thị giá trị gần đúng có thể không phải là giá trị thực.

# Syntax
SHOW TABLE STATUS FROM `<database>` WHERE `name` LIKE '<table>';

# Example
SHOW TABLE STATUS FROM `autoinc` WHERE `name` LIKE 'user';

# Result
------------------------------
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
------------------------------
user InnoDB 10 Dynamic 4 4096 16384 0 0 0 5 2020-05-26 20:01:31 2020-05-26 20:04:14 NULL utf8mb4_unicode_ci NULL

Giá trị của Rows là 4 và Auto_Increment là 5, đây không phải là giá trị thực. Đây là các giá trị gần đúng.

Để nhận được giá trị chính xác, chúng ta có thể sử dụng lệnh SHOW CREATE như hình bên dưới.

# Example
SHOW CREATE TABLE user;

# Result
Table Create Table
------------------------------
user CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstName` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`lastName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`username` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Điều này hiển thị giá trị chính xác của thuộc tính AUTO_INCREMENT.

AUTO_INCREMENT Ví dụ về Cập nhật

Để cập nhật giá trị của AUTO_INCREMENT, chúng ta có thể sử dụng truy vấn ALTER như hình dưới đây. Thật dễ dàng để đặt giá trị AUTO_INCREMENT của một bảng trống vì MySQL không cần tạo bản sao của các hàng hiện có để thực thi lệnh ALTER. Ngoài ra, chúng tôi có thể đặt lại AUTO_INCREMENT thành 1 hoặc đặt thành bất kỳ giá trị ưa thích nào để bắt đầu chuỗi.

# Syntax
ALTER TABLE <table> AUTO_INCREMENT = <value>;

# Examples

ALTER TABLE `autoinc`.`user` AUTO_INCREMENT = 1;

ALTER TABLE user AUTO_INCREMENT = 1;

ALTER TABLE `autoinc`.`user` AUTO_INCREMENT = 100000;

Tóm tắt

Hướng dẫn này cung cấp cho các truy vấn các ví dụ để lấy giá trị của thuộc tính AUTO_INCREMENT của bảng InnoDB. Nó cũng cung cấp các ví dụ để cập nhật thuộc tính AUTO_INCREMENT.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để thực hiện chèn hàng loạt trong MySQL?

  2. Chuyển từ MySQL sang PostgreSQL - Điều bạn nên biết

  3. MySQL - Các phương pháp khác nhau để biết người dùng hiện tại

  4. Cách thay đổi múi giờ máy chủ MySQL

  5. Làm thế nào để xử lý lỗi cho các mục nhập trùng lặp?