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_INCREMENTBạ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ếtVí dụ:
id INT AUTO_INCREMENTMySQL 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
005Ngườ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:
usersDữ liệu:
| id | username |
|---|---|
| 1 | admin |
| 2 | nam |
| 3 | linh |
Bạn INSERT:
INSERT INTO users(username)
VALUES('hoa');Kết quả:
| id | username |
| 4 | hoa |
😎
Không cần ghi:
id = 4MySQL 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 entryVì 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ếmRấ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òngKhông.
Đây là hai thứ khác nhau.
😎
Ví dụ:
| id | username |
| 1 | admin |
| 2 | nam |
| 3 | hoa |
Tổng số dòng:
3ID cuối:
3Tạ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:
| id | username |
| 1 | admin |
| 3 | hoa |
Bạn thêm:
INSERT INTO users(username)
VALUES('linh');MySQL tạo:
| id | username |
| 1 | admin |
| 3 | hoa |
| 4 | linh |
😎
Không phải:
2Mà 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ếpVí dụ:
Đã dùng tới 100Bản ghi 101 sẽ nhận:
101Dù:
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:
1000Không có nghĩa bảng có:
1000 dòngCó thể:
700 dòngthô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ả:
5000Sế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 INTQuên:
AUTO_INCREMENTSau vài ngày:
💀
Duplicate entryxuấ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ănghoặc cơ chế tương tự.
Tuy nhiên các hệ thống cực lớn đôi khi dùng:
UUID
Snowflake IDNhư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_INCREMENTcó 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 9thì đừ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. 🤡