1. Giới thiệu

SQL Data Types (kiểu dữ liệu) trong MySQL xác định loại dữ liệu mà một cột có thể chứa. Khi bạn tạo bảng, việc chọn kiểu dữ liệu phù hợp cho từng cột là rất quan trọng vì nó ảnh hưởng đến việc lưu trữ, truy xuất dữ liệu và hiệu suất của cơ sở dữ liệu. MySQL cung cấp nhiều loại dữ liệu khác nhau để lưu trữ chuỗi ký tự, số, ngày tháng và các loại dữ liệu đặc biệt khác.

2. Các nhóm SQL Data Types chính trong MySQL

MySQL chia các kiểu dữ liệu thành ba nhóm chính:

  1. Kiểu dữ liệu số (Numeric Data Types)
  2. Kiểu dữ liệu chuỗi (String Data Types)
  3. Kiểu dữ liệu ngày tháng (Date and Time Data Types)

3. Kiểu dữ liệu số trong MySQL

Các kiểu dữ liệu số trong MySQL được chia làm hai loại chính: số nguyênsố thực.

a. Số nguyên (Integer types)

  • TINYINT: Lưu trữ số nguyên nhỏ, phạm vi giá trị từ -128 đến 127 (nếu là UNSIGNED, phạm vi từ 0 đến 255).
  • SMALLINT: Lưu trữ số nguyên, phạm vi giá trị từ -32,768 đến 32,767 (UNSIGNED: 0 đến 65,535).
  • MEDIUMINT: Lưu trữ số nguyên trung bình, phạm vi từ -8,388,608 đến 8,388,607 (UNSIGNED: 0 đến 16,777,215).
  • **INT hoặc INTEGER: Lưu trữ số nguyên lớn, phạm vi từ -2,147,483,648 đến 2,147,483,647 (UNSIGNED: 0 đến 4,294,967,295).
  • BIGINT: Lưu trữ số nguyên rất lớn, phạm vi từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807 (UNSIGNED: 0 đến 18,446,744,073,709,551,615).

Ví dụ về sử dụng số nguyên:

shell
CREATE TABLE products (
    product_id INT AUTO_INCREMENT,
    product_name VARCHAR(100),
    quantity INT,
    PRIMARY KEY (product_id)
);

b. Số thực (Floating-point types)

  • FLOAT(p): Lưu trữ số thực có độ chính xác đơn. p là số chữ số tổng (precision).
  • DOUBLE(p, s): Lưu trữ số thực có độ chính xác kép. p là tổng số chữ số, và s là số chữ số ở phần thập phân.
  • DECIMAL(p, s): Lưu trữ số thực chính xác cố định. p là tổng số chữ số và s là số chữ số thập phân.

Ví dụ về sử dụng số thực:

shell
CREATE TABLE salaries (
    employee_id INT,
    salary DECIMAL(10, 2),
    PRIMARY KEY (employee_id)
);

Trong ví dụ trên, DECIMAL(10, 2) lưu trữ tối đa 10 chữ số, trong đó 2 chữ số là ở phần thập phân.

4. Kiểu dữ liệu chuỗi trong MySQL

Các kiểu dữ liệu chuỗi trong MySQL dùng để lưu trữ văn bản, chuỗi ký tự.

a. Kiểu dữ liệu chuỗi ký tự

  • CHAR(n): Lưu trữ chuỗi ký tự có độ dài cố định, với n là số ký tự. Tối đa 255 ký tự.
  • VARCHAR(n): Lưu trữ chuỗi ký tự có độ dài thay đổi, với n là số ký tự tối đa. Tối đa 65,535 ký tự.
  • TEXT: Lưu trữ chuỗi văn bản lớn, tối đa 65,535 ký tự.
  • TINYTEXT: Chuỗi văn bản nhỏ, tối đa 255 ký tự.
  • MEDIUMTEXT: Chuỗi văn bản trung bình, tối đa 16,777,215 ký tự.
  • LONGTEXT: Chuỗi văn bản rất lớn, tối đa 4,294,967,295 ký tự.

Ví dụ về sử dụng VARCHAR và TEXT:

shell
CREATE TABLE articles (
    article_id INT AUTO_INCREMENT,
    title VARCHAR(255),
    content TEXT,
    PRIMARY KEY (article_id)
);

Trong ví dụ này:

  • title là kiểu VARCHAR(255), có thể lưu trữ tối đa 255 ký tự.
  • content là kiểu TEXT, có thể lưu trữ các bài viết lớn hơn với kích thước tối đa 65,535 ký tự.

b. Kiểu dữ liệu nhị phân

  • BINARY(n): Lưu trữ chuỗi nhị phân có độ dài cố định, với n là số byte.
  • VARBINARY(n): Lưu trữ chuỗi nhị phân có độ dài thay đổi, với n là số byte tối đa.
  • BLOB: Lưu trữ dữ liệu nhị phân lớn (Binary Large Object), tối đa 65,535 byte.

Ví dụ về sử dụng BLOB:

shell
CREATE TABLE files (
    file_id INT AUTO_INCREMENT,
    file_data BLOB,
    PRIMARY KEY (file_id)
);

Trong ví dụ này, file_data lưu trữ dữ liệu nhị phân như hình ảnh, tài liệu hoặc bất kỳ tệp nào.

5. Kiểu dữ liệu ngày tháng trong MySQL

Như đã trình bày chi tiết ở phần trước, MySQL cung cấp các kiểu dữ liệu để lưu trữ thông tin ngày tháng, bao gồm:

  • DATE: Lưu trữ ngày với định dạng YYYY-MM-DD.
  • TIME: Lưu trữ thời gian với định dạng HH:MM:SS.
  • DATETIME: Lưu trữ cả ngày và thời gian với định dạng YYYY-MM-DD HH:MM:SS.
  • TIMESTAMP: Lưu trữ ngày và thời gian với múi giờ.
  • YEAR: Lưu trữ năm với định dạng YYYY.

Ví dụ về sử dụng DATE và TIMESTAMP:

shell
CREATE TABLE events (
    event_id INT AUTO_INCREMENT,
    event_name VARCHAR(100),
    event_date DATE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (event_id)
);

Trong ví dụ này:

  • event_date lưu trữ ngày của sự kiện.
  • created_at tự động ghi nhận thời gian khi bản ghi mới được tạo.

6. Tổng quan các kiểu dữ liệu trong MySQL

Nhóm kiểu dữ liệuKiểu dữ liệuMô tảPhạm vi giá trị
Số nguyênTINYINTSố nguyên nhỏ-128 đến 127 (UNSIGNED: 0 đến 255)
SMALLINTSố nguyên vừa-32,768 đến 32,767 (UNSIGNED: 0 đến 65,535)
MEDIUMINTSố nguyên trung bình-8,388,608 đến 8,388,607 (UNSIGNED: 0 đến 16,777,215)
INT / INTEGERSố nguyên lớn-2,147,483,648 đến 2,147,483,647 (UNSIGNED: 0 đến 4,294,967,295)
BIGINTSố nguyên rất lớn-9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807 (UNSIGNED: 0 đến 18,446,744,073,709,551,615)
Số thựcFLOATSố thực có độ chính xác đơn-3.402823466E+38 đến -1.175494351E-38, 0, và 1.175494351E-38 đến 3.402823466E+38
DOUBLESố thực có độ chính xác képNhư FLOAT, nhưng có độ chính xác cao hơn
DECIMALSố thực chính xác với phần thập phânXác định bởi người dùng
Chuỗi ký tựCHAR(n)Chuỗi ký tự có độ dài cố địnhTối đa 255 ký tự
VARCHAR(n)Chuỗi ký tự có độ dài thay đổiTối đa 65,535 ký tự
TEXTChuỗi văn bản lớnTối đa 65,535 ký tự
BLOBDữ liệu nhị phânTối đa 65,535 byte
Ngày thángDATENgàyYYYY-MM-DD
TIMEThời gianHH:MM:SS
DATETIMENgày và thời gianYYYY-MM-DD HH:MM:SS
TIMESTAMPNgày và thời gian với múi giờYYYY-MM-DD HH:MM:SS
YEARNămYYYY (1901 đến 2155)

Kết luận

SQL Data Types đóng vai trò quan trọng trong việc thiết kế cơ sở dữ liệu, giúp xác định cách dữ liệu được lưu trữ và truy xuất. Hiểu và chọn đúng kiểu dữ liệu giúp tối ưu hóa lưu trữ, bảo mật và hiệu suất truy vấn.

  • Kiểu dữ liệu số giúp quản lý các giá trị toán học.
  • Kiểu dữ liệu chuỗi lưu trữ văn bản, thông tin miêu tả.
  • Kiểu dữ liệu ngày tháng giúp quản lý dữ liệu về thời gian.

Hãy thử áp dụng các kiểu dữ liệu này trong các bài tập và dự án thực tế trên CodeTutHub để hiểu rõ hơn cách chúng hoạt động trong MySQL!