Thứ Hai, 22 tháng 6, 2026

AUTO_INCREMENT hoạt động ra sao? (Con số tưởng như vô tri, nhưng lại quyết định số phận của rất nhiều bảng dữ liệu)

Số trên bảng số xe tạo ra sao nhỉ? Ai đó sẽ ngồi ghi lại vào sổ tay? Chắc chắn là không rồi. Có rất nhiều "sô" trong cuộc sống hàng ngày được tự động tạo theo một qui luật nào đó.

Bạn tạo bảng đầu tiên trong MySQL.

Ví dụ:

CREATE TABLE users(

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(100)

);

Bạn thấy:

AUTO_INCREMENT

Bạn copy.

Bạn paste.

Bạn dùng.

😎


6 tháng sau.


Có người hỏi:

"AUTO_INCREMENT là gì?"


Bạn trả lời:

"Em cũng không rõ..."

"Nhưng đừng xóa nó."

🤡


AUTO_INCREMENT là gì?


AUTO_INCREMENT là thuộc tính trong MySQL giúp tự động tăng giá trị của một cột số mỗi khi thêm bản ghi mới.

Thường được dùng cho:

ID người dùng
ID sản phẩm
ID đơn hàng
ID bài viết

Ví dụ:

id INT AUTO_INCREMENT

MySQL sẽ tự tạo:

1
2
3
4
5
...

mà bạn không cần nhập tay.

😎


Ví dụ đời thường 🍜

Bạn tới bệnh viện.


Lễ tân phát số thứ tự:

001
002
003
004
005

Người tới sau nhận số lớn hơn.


Không cần tranh cãi.

Không cần bốc lại.

😎


AUTO_INCREMENT hoạt động gần giống như vậy.


Ví dụ đầu tiên 😄

Bảng:

users

Dữ liệu:

idusername
1admin
2nam
3linh

Bạn INSERT:

INSERT INTO users(username)
VALUES('hoa');

Kết quả:

idusername
4hoa

😎


Không cần ghi:

id = 4

MySQL tự làm.


Nếu không dùng AUTO_INCREMENT 😭

Ví dụ:

INSERT INTO users
VALUES(4,'hoa');

Bạn phải tự tính.


Một ngày đẹp trời:

VALUES(4,'minh');

Nhưng:

4 đã tồn tại

💀


Lỗi:

Duplicate entry

Vì sao AUTO_INCREMENT thường đi với PRIMARY KEY?

Ví dụ:

id INT AUTO_INCREMENT PRIMARY KEY

Đây gần như là combo quốc dân.

😄


Vì:

ID
↓
Duy nhất
↓
Không trùng
↓
Dễ tìm kiếm

Rất phù hợp làm khóa chính.


Một hiểu lầm cực phổ biến 🤡

Người mới nghĩ:

AUTO_INCREMENT
=
Đếm số dòng

Không.


Đây là hai thứ khác nhau.

😎


Ví dụ:

idusername
1admin
2nam
3hoa

Tổng số dòng:

3

ID cuối:

3

Tạm thời giống nhau.


Nhưng rồi...

😈


Xóa dữ liệu thì sao?

Bạn xóa:

DELETE FROM users
WHERE id=2;

Bảng còn:

idusername
1admin
3hoa

Bạn thêm:

INSERT INTO users(username)
VALUES('linh');

MySQL tạo:

idusername
1admin
3hoa
4linh

😎


Không phải:

2

Mà là:

4

Đây chính là lý do xuất hiện bài tiếp theo:

Vì sao xóa dữ liệu rồi ID vẫn tăng? 🤡

😄


AUTO_INCREMENT nhớ số cuối ở đâu?

MySQL lưu lại:

Giá trị kế tiếp

Ví dụ:

Đã dùng tới 100

Bản ghi 101 sẽ nhận:

101

Dù:

50
60
70

đã bị xóa.


Có nên dùng ID làm số lượng dữ liệu không?

👉 Không.


Ví dụ:

ID lớn nhất:

1000

Không có nghĩa bảng có:

1000 dòng

Có thể:

700 dòng

thôi.

😅


Một ví dụ "đau lòng" 😭

Sếp hỏi:

"Website có bao nhiêu user?"


Bạn trả lời:

SELECT MAX(id)
FROM users;

Kết quả:

5000

Sếp vui:

"Ồ, 5000 user."

😎


Thực tế:

SELECT COUNT(*)
FROM users;

Kết quả:

3127

🤡


InfinityFree Case 😅

Nhiều bạn upload website.


Tạo bảng:

id INT

Quên:

AUTO_INCREMENT

Sau vài ngày:

💀

Duplicate entry

xuất hiện.


Nguyên nhân:

MySQL không tự tăng ID.


Bạn phải tự nhập.


Sự thật biết rồi khổ lắm nói mãi😎

Facebook.

Shopee.

YouTube.

WordPress.


Hầu hết hệ thống lớn đều có:

ID tự tăng

hoặc cơ chế tương tự.


Tuy nhiên các hệ thống cực lớn đôi khi dùng:

UUID
Snowflake ID

Nhưng đó là câu chuyện khác.

😄


Debug kiểu dev thật 😎

✅ 1. Xem cấu trúc bảng

SHOW CREATE TABLE users;

Kiểm tra:

AUTO_INCREMENT

có tồn tại không.


✅ 2. Xem giá trị kế tiếp

Trong phpMyAdmin thường hiển thị:

Auto Increment

✅ 3. Đừng tự nhập ID nếu không cần

Ví dụ:

INSERT INTO users(username)
VALUES('hoa');

😎


Thay vì:

INSERT INTO users
VALUES(999,'hoa');

🤡


Checklist chuẩn không cần chỉnh 😎

☑ Dùng cho ID

☑ Thường đi với PRIMARY KEY

☑ Không dùng để đếm số dòng

☑ Không tự nhập ID nếu không cần

☑ Hiểu rằng ID có thể bị nhảy số

☑ Xóa dữ liệu không làm ID quay lại


FAQ nhanh

AUTO_INCREMENT có tự tăng không?

→ Có 😎


Xóa ID số 5 rồi thêm mới có dùng lại số 5 không?

→ Thường là không.


Có nên dùng AUTO_INCREMENT cho khóa chính?

→ Rất phổ biến.


ID lớn nhất có bằng số dòng không?

→ Không 😅


Bạn có thể cũng đang gặp 😭

👉 Vì sao xóa dữ liệu rồi ID vẫn tăng?

👉 Duplicate Entry là gì?

👉 JOIN là gì?

👉 LIMIT trong MySQL là gì?

👉 Pagination hoạt động ra sao?

👉 Backup database đúng cách


Tổng kết

AUTO_INCREMENT là cơ chế giúp MySQL tự tạo ID mới mỗi khi thêm dữ liệu.

Nó giống như máy phát số thứ tự ở bệnh viện:

👉 Người tới sau nhận số lớn hơn.

👉 Không cần tranh nhau.

👉 Không cần tự tính.

😎

Điều quan trọng nhất cần nhớ là:

AUTO_INCREMENT dùng để tạo ID duy nhất.

Không phải để đếm số dòng.

Và nếu bạn thấy:

1
3
4
8
9

thì đừng hoảng.

MySQL hoàn toàn bình thường.

Chỉ là nó nhớ số tốt hơn chúng ta mà thôi. 🤡