hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • MySQL
Thiết Lập Tăng Tự Động (AUTO_INCREMENT), định danh duy nhất toàn cục (UUID) Trong MySQL

Thiết Lập Tăng Tự Động (AUTO_INCREMENT), định danh duy nhất toàn cục (UUID) Trong MySQL

  • 07-07-2025
  • Toanngo92
  • 0 Comments

Dưới đây là phần tiếp theo trong chuỗi bài học DDL, với nội dung thiết lập AUTO_INCREMENT trong MySQL — rất thường gặp trong thực tế khi làm việc với khóa chính kiểu số:


Mục lục

  • Thiết Lập Tăng Tự Động (AUTO_INCREMENT) Trong MySQL
    • 1. AUTO_INCREMENT Là Gì?
      • ✅ Lợi ích:
    • 2. Cách Sử Dụng AUTO_INCREMENT
      • Ví dụ cơ bản:
    • 3. Chèn Dữ Liệu Với AUTO_INCREMENT
    • 4. Xem Giá Trị AUTO_INCREMENT Hiện Tại
    • 5. Đặt Giá Trị Bắt Đầu Của AUTO_INCREMENT
    • 6. Xóa hoặc Reset AUTO_INCREMENT
      • Reset AUTO_INCREMENT về 1 (chỉ khi bảng không có dữ liệu):
    • 7. Một Số Lưu Ý Khi Dùng AUTO_INCREMENT
    • 8. Kết Luận
    • 9. UUID Là Gì?
    • 10. Khi Nào Nên Dùng UUID Thay Cho AUTO_INCREMENT?
    • 11. Tạo UUID Trong MySQL
    • 12. Tạo Bảng Với UUID Là Khóa Chính
      • Ví dụ:
    • 13. Thêm Dữ Liệu Với UUID
    • 14. Tối Ưu UUID Với UUID_SHORT()
    • 15. Gán UUID Làm Giá Trị Mặc Định?
      • Cách 1: Sinh trong ứng dụng (PHP, Laravel, NodeJS…)
      • Cách 2: Dùng trigger trong MySQL
    • 16. Lưu UUID Dưới Dạng BINARY (Hiệu năng cao hơn)
    • 9. Tổng Kết

Thiết Lập Tăng Tự Động (AUTO_INCREMENT) Trong MySQL

Trong các ứng dụng cơ sở dữ liệu, AUTO_INCREMENT là một tính năng rất phổ biến được sử dụng để tự động tạo giá trị duy nhất cho mỗi dòng dữ liệu mới — đặc biệt là cho các trường khóa chính (id, MaSV, …).


1. AUTO_INCREMENT Là Gì?

AUTO_INCREMENT là một thuộc tính được áp dụng cho các cột kiểu số nguyên (INT, BIGINT, TINYINT, …) để tự động tăng giá trị mỗi khi có bản ghi mới được thêm vào bảng.

✅ Lợi ích:

  • Không cần phải tự nhập giá trị cho khóa chính.
  • Đảm bảo không bị trùng lặp giá trị.
  • Tiện lợi cho việc tạo mã tự sinh, đặc biệt là các id.

2. Cách Sử Dụng AUTO_INCREMENT

Ví dụ cơ bản:

CREATE TABLE Users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

Khi bạn chèn dữ liệu mà không chỉ định id, MySQL sẽ tự động tạo ra giá trị id mới bằng cách tăng thêm 1 đơn vị so với giá trị cao nhất hiện tại.


3. Chèn Dữ Liệu Với AUTO_INCREMENT

INSERT INTO Users (username, email)
VALUES ('alice', '[email protected]'),
       ('bob', '[email protected]');

→ MySQL sẽ tự gán id = 1 cho Alice và id = 2 cho Bob nếu bảng đang trống.


4. Xem Giá Trị AUTO_INCREMENT Hiện Tại

Bạn có thể dùng:

SHOW TABLE STATUS LIKE 'Users';

→ Trường Auto_increment sẽ cho biết giá trị tiếp theo sẽ được gán.


5. Đặt Giá Trị Bắt Đầu Của AUTO_INCREMENT

Mặc định bắt đầu từ 1, nhưng bạn có thể thay đổi:

ALTER TABLE Users AUTO_INCREMENT = 1000;

→ Bản ghi kế tiếp sẽ được gán id = 1000.


6. Xóa hoặc Reset AUTO_INCREMENT

Reset AUTO_INCREMENT về 1 (chỉ khi bảng không có dữ liệu):

ALTER TABLE Users AUTO_INCREMENT = 1;

Hoặc, xóa toàn bộ dữ liệu và reset:

TRUNCATE TABLE Users;

→ Lệnh TRUNCATE xóa sạch dữ liệu và reset giá trị AUTO_INCREMENT về mặc định.


7. Một Số Lưu Ý Khi Dùng AUTO_INCREMENT

Lưu ýGiải thích
✅ Phải dùng cho cột khóa chính hoặc có chỉ mục (INDEX, UNIQUE, …)
❌ Chỉ dùng được với một cột duy nhất trong bảng
❌ Không áp dụng cho kiểu dữ liệu không phải số nguyên
✅ Tốt nhất dùng với kiểu UNSIGNED để tránh âm và mở rộng phạm vi

8. Kết Luận

AUTO_INCREMENT giúp đơn giản hóa việc sinh giá trị cho khóa chính, đảm bảo tính duy nhất và không trùng lặp. Đây là một trong những tính năng không thể thiếu khi thiết kế cơ sở dữ liệu cho ứng dụng web, đặc biệt là các hệ thống có danh sách người dùng, sản phẩm, đơn hàng…

Tuyệt vời! Trước khi đến khóa ngoại, chúng ta hãy tìm hiểu về UUID trong MySQL, một khái niệm rất quan trọng khi bạn cần một định danh duy nhất toàn cục (globally unique identifier), thường được dùng thay cho AUTO_INCREMENT trong các hệ thống phân tán hoặc có yêu cầu bảo mật cao.

9. UUID Là Gì?

  • UUID (Universally Unique Identifier) là một chuỗi 128-bit dùng để xác định duy nhất một đối tượng, bất kể hệ thống hoặc thời gian.
  • Thường được biểu diễn dưới dạng chuỗi 36 ký tự (bao gồm dấu gạch ngang), ví dụ:
550e8400-e29b-41d4-a716-446655440000

10. Khi Nào Nên Dùng UUID Thay Cho AUTO_INCREMENT?

UUIDAUTO_INCREMENT
Đảm bảo duy nhất toàn cầuDuy nhất trong phạm vi một bảng
Không đoán được (tăng độ bảo mật)Có thể đoán được giá trị tiếp theo
Dùng tốt trong hệ thống phân tán, nhiều máyPhù hợp hệ thống nhỏ, đơn máy chủ
Kích thước lớn hơn, tốc độ truy vấn chậm hơnNhanh hơn, nhẹ hơn

11. Tạo UUID Trong MySQL

MySQL hỗ trợ hàm tích hợp để tạo UUID:

SELECT UUID();

Kết quả:

e.g., 'c9b1b5f8-35e2-11ee-be56-0242ac120002'

12. Tạo Bảng Với UUID Là Khóa Chính

Ví dụ:

CREATE TABLE Products (
    id CHAR(36) PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

✅ Kiểu CHAR(36) là hợp lý cho UUID ở dạng chuỗi.


13. Thêm Dữ Liệu Với UUID

Bạn có thể chèn dữ liệu bằng cách gọi UUID():

INSERT INTO Products (id, name)
VALUES (UUID(), 'Áo sơ mi nam');

14. Tối Ưu UUID Với UUID_SHORT()

Nếu bạn muốn UUID dạng số (ngắn hơn), bạn có thể dùng UUID_SHORT():

SELECT UUID_SHORT();

⚠️ UUID_SHORT() không đảm bảo duy nhất toàn cầu, chỉ duy nhất trên mỗi máy (phụ thuộc vào server_id), và có thể bị trùng nếu dùng sai cách.


15. Gán UUID Làm Giá Trị Mặc Định?

MySQL hiện không hỗ trợ dùng hàm UUID() làm DEFAULT trực tiếp trong CREATE TABLE. Nếu muốn tự sinh UUID, bạn có 2 cách:

Cách 1: Sinh trong ứng dụng (PHP, Laravel, NodeJS…)

// PHP
$uuid = \Ramsey\Uuid\Uuid::uuid4()->toString();

Cách 2: Dùng trigger trong MySQL

DELIMITER $$

CREATE TRIGGER before_insert_product
BEFORE INSERT ON Products
FOR EACH ROW
BEGIN
  IF new.id IS NULL THEN
    SET new.id = UUID();
  END IF;
END$$

DELIMITER ;

16. Lưu UUID Dưới Dạng BINARY (Hiệu năng cao hơn)

UUID ở dạng CHAR(36) tốn nhiều không gian và truy vấn chậm. Giải pháp: lưu dưới dạng BINARY(16).

CREATE TABLE Products (
    id BINARY(16) PRIMARY KEY,
    name VARCHAR(100)
);

Dùng hàm UUID_TO_BIN() để chèn, và BIN_TO_UUID() để đọc:

INSERT INTO Products (id, name)
VALUES (UUID_TO_BIN(UUID()), 'Sản phẩm A');

SELECT BIN_TO_UUID(id), name FROM Products;

9. Tổng Kết

Tùy chọnƯu điểmNhược điểm
AUTO_INCREMENTNhanh, đơn giảnDễ đoán, không phù hợp phân tán
UUID() + CHAR(36)Duy nhất toàn cầu, dễ dùngTốn dung lượng, truy vấn chậm
UUID_TO_BIN()Tối ưu hóa lưu trữ, hiệu năng tốtPhức tạp hơn khi thao tác

👉 Nếu bạn đang xây dựng một hệ thống phân tán, cần đồng bộ hóa hoặc chia sẻ dữ liệu giữa nhiều máy chủ, UUID là lựa chọn ưu việt hơn. Nhưng nếu hệ thống đơn giản và quan trọng tốc độ, AUTO_INCREMENT vẫn là lựa chọn lý tưởng.

Bài viết liên quan:

Các kiểu ràng buộc dữ liệu (constraint) trong MySQL
Khóa Ngoại (FOREIGN KEY) Trong MySQL
Tìm Hiểu Ràng Buộc UNIQUE Trong MySQL
Tìm Hiểu Khóa Chính (Primary Key) Trong MySQL
Các câu lệnh DDL trong MySQL
Data Types (kiểu dữ liệu) trong MySQL
Storage Engines/table types (công cụ lưu trữ) trong MySQL
Khởi tạo và quản trị database trong MySQL
Phân loại các kiểu câu lệnh SQL trong MySQL
Cài đặt và sử dụng Mysql Server Mac Os

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Các kiểu ràng buộc dữ liệu (constraint) trong MySQL

Khóa Ngoại (FOREIGN KEY) Trong MySQL

Thiết Lập Tăng Tự Động (AUTO_INCREMENT), định danh duy nhất toàn cục (UUID) Trong MySQL

Cấu trúc dữ liệu Tree

Mô hình mẫu trên giấy (nguyên mẫu giấy) – Paper Prototyping

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×