AUTO_INCREMENT là gì trong MySQL?
Cơ bản về AUTO_INCREMENT
Trong MySQL, AUTO_INCREMENT là một tính năng tự động tăng các giá trị số trong một bảng cơ sở dữ liệu. Nó thường được dùng làm khóa chính (PRIMARY KEY), cho phép các số thứ tự được gán tự động mỗi khi một hàng mới được chèn—không cần chỉ định ID một cách thủ công.
Các ứng dụng chính của AUTO_INCREMENT
- Tự động tạo ID thành viên : Gán một ID duy nhất khi người dùng đăng ký
- Quản lý số đơn hàng : Tự động gán một số cho mỗi đơn hàng
- Gán mã sản phẩm : Được sử dụng làm định danh duy nhất cho sản phẩm
Bằng cách sử dụng AUTO_INCREMENT một cách hợp lý, bạn có thể duy trì tính duy nhất của dữ liệu đồng thời giảm bớt gánh nặng quản trị.
Cách kiểm tra giá trị AUTO_INCREMENT trong MySQL [3 SQL Commands]
Phương pháp 1: Sử dụng SHOW TABLE STATUS
SHOW TABLE STATUS LIKE 'table_name';
Khi bạn thực thi lệnh này, giá trị AUTO_INCREMENT hiện tại sẽ được hiển thị trong cột Auto_increment.
Phương pháp 2: Lấy từ INFORMATION_SCHEMA.TABLES
SELECT AUTO_INCREMENT FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name = 'table_name';
Phương pháp này cho phép bạn truy xuất trực tiếp giá trị AUTO_INCREMENT được đặt cho bảng mục tiêu.
Phương pháp 3: Sử dụng SHOW CREATE TABLE
SHOW CREATE TABLE table_name;
Khi bạn thực thi lệnh này, DDL (Data Definition Language) tạo bảng sẽ được hiển thị, trong đó bao gồm cài đặt AUTO_INCREMENT.

Cách thiết lập và sửa đổi AUTO_INCREMENT
Đặt AUTO_INCREMENT khi tạo bảng mới
Để định nghĩa một cột có AUTO_INCREMENT khi tạo bảng mới, sử dụng SQL sau đây:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255)
);
Thay đổi giá trị AUTO_INCREMENT của bảng hiện có
Nếu bạn muốn thay đổi giá trị AUTO_INCREMENT của một bảng đã tồn tại, sử dụng lệnh sau đây:
ALTER TABLE users AUTO_INCREMENT = 1000;
Sau khi thực thi lệnh này, bản ghi tiếp theo sẽ bắt đầu với ID 1000.
Thay đổi giá trị tăng của AUTO_INCREMENT (MySQL 8.0 trở lên)
Mặc định, giá trị AUTO_INCREMENT tăng lên 1. Tuy nhiên, bạn có thể thay đổi giá trị tăng nếu cần.
SET @@auto_increment_increment = 5;
Với cài đặt này, giá trị AUTO_INCREMENT sẽ tăng lên 5 mỗi lần (ví dụ: 1, 6, 11, …).
Lưu ý quan trọng khi sử dụng AUTO_INCREMENT [Prevent Data Issues]
Giới hạn giá trị tối đa của AUTO_INCREMENT
Giá trị tối đa của AUTO_INCREMENT phụ thuộc vào kiểu dữ liệu của cột. Ví dụ, khi sử dụng kiểu INT, giá trị tối đa là 2,147,483,647. Nếu vượt quá giới hạn này, không thể tạo ID mới và sẽ xảy ra lỗi.
Giải pháp
- Sử dụng
BIGINTđể hỗ trợ giá trị lớn hơn nhiều - Xem xét lưu trữ dữ liệu hoặc đặt lại khi cần thiết
Hành vi của AUTO_INCREMENT sau khi xóa dữ liệu
Trong MySQL, việc xóa bản ghi không tự động đặt lại giá trị AUTO_INCREMENT.
DELETE FROM users WHERE id = 100;
Ngay cả khi một ID cụ thể bị xóa như vậy, giá trị chèn tiếp theo vẫn tiếp tục từ bộ đếm hiện tại mà không tái sử dụng.
Cách đặt lại
Sử dụng TRUNCATE TABLE sẽ xóa toàn bộ dữ liệu và đặt lại giá trị AUTO_INCREMENT.
TRUNCATE TABLE users;
Sau khi thực hiện thao tác này, ID chèn tiếp theo sẽ bắt đầu lại từ 1.
Giao dịch và AUTO_INCREMENT
Trong MySQL, giá trị AUTO_INCREMENT không được hoàn nguyên ngay cả khi một giao dịch bị rollback (ROLLBACK).
START TRANSACTION;
INSERT INTO users (name) VALUES ('Alice');
ROLLBACK;
Trong trường hợp này, dữ liệu không được chèn, nhưng giá trị AUTO_INCREMENT vẫn tăng. Do đó, có thể xuất hiện các khoảng trống trong số ID.
Câu hỏi thường gặp (FAQ)
Câu hỏi 1: Tại sao giá trị AUTO_INCREMENT đôi khi có khoảng trống?
A: Vì các số không được đặt lại sau một INSERT kèm ROLLBACK. Các thao tác xóa và các lần chèn thất bại cũng có thể gây ra khoảng trống.
Q2: Làm thế nào để đặt lại giá trị AUTO_INCREMENT?
A: Thực thi TRUNCATE TABLE table_name; để đặt lại nó.
Q3: Làm thế nào để kiểm tra giá trị AUTO_INCREMENT hiện tại?
A: Sử dụng SHOW TABLE STATUS hoặc truy vấn INFORMATION_SCHEMA.TABLES.
Q4: Điều gì sẽ xảy ra nếu AUTO_INCREMENT vượt quá giá trị tối đa?
A: Nếu nó vượt quá giá trị tối đa của INT, sẽ xảy ra lỗi. Bạn phải thay đổi kiểu cột thành BIGINT.


