CodeGym /Các khóa học /SQL SELF /Kiểu dữ liệu số: INTEGER, NUMERIC

Kiểu dữ liệu số: INTEGER, NUMERIC, FLOAT

SQL SELF
Mức độ , Bài học
Có sẵn

Hôm nay tụi mình sẽ nói về kiểu dữ liệu số trong PostgreSQL nha. Nếu bạn từng thắc mắc làm sao lưu số "42", tính toán tài chính hay thậm chí là mili giây, thì bạn đến đúng chỗ rồi đó. Cùng tìm hiểu xem kiểu nào hợp cho từng trường hợp để bạn và dữ liệu của bạn đều "chill" nhé.

Kiểu dữ liệu số trong PostgreSQL chia thành ba nhóm chính:

  1. Số nguyên (INTEGER): để lưu số không có phần thập phân. Kiểu như 1, 42, -7 ấy mà.
  2. Số chính xác (NUMERIC): để lưu số có số lượng chữ số sau dấu phẩy cố định. Cực kỳ hữu ích cho tính toán tài chính, nơi độ chính xác còn quan trọng hơn cả cuộc sống.
  3. Số thực dấu phẩy động (REAL): để lưu số có thể rất lớn hoặc siêu nhỏ. Độ chính xác kém hơn NUMERIC, nhưng lại hợp cho tính toán khoa học.

Kiểu INTEGER

INTEGER là kiểu dữ liệu cho số nguyên. Dùng khi bạn cần lưu số không có phần thập phân. PostgreSQL có tận ba loại INTEGER để phù hợp với các khoảng giá trị khác nhau:

  • SMALLINT: kiểu số nguyên nhỏ. Khoảng: từ -32,768 đến 32,767.
  • INTEGER (hoặc INT): kiểu số nguyên tiêu chuẩn. Khoảng: từ -2,147,483,648 đến 2,147,483,647.
  • BIGINT: cho số siêu lớn. Khoảng: từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807.

Giả sử tụi mình có bảng students lưu thông tin sinh viên: tên, tuổi và số tín chỉ đã đạt được:

id name age credits
1 Otto Nate 21 30
2 Maria Chi 22 45
3 Peter Val 20 60
4 Anna Song 23 50
5 Sophie Zhang 21 35

Giờ chạy thử một câu SQL đơn giản để lấy danh sách sinh viên với tuổi và số tín chỉ nhé:

SELECT name, age, credits
FROM students;

Kết quả:

name age credits
Otto Nate 21 30
Maria Chi 22 45
Peter Val 20 60
Anna Song 23 50
Sophie Zhang 21 35

Khi nào dùng INTEGER?

  • Lưu id (id, số đơn hàng).
  • Lưu số lượng gì đó (ví dụ số hàng trong kho, số sinh viên).

Kiểu NUMERIC

NUMERIC là kiểu dữ liệu cho số chính xác với dấu phẩy cố định. Nếu bạn cần lưu kiểu như 123.456, và sai một số sau dấu phẩy là "toang" (mất uy tín hoặc tiền), thì dùng NUMERIC nha.

Cú pháp khai báo: NUMERIC(precision, scale), trong đó:

  • precision — tổng số chữ số (bao gồm cả trước và sau dấu phẩy).
  • scale — số chữ số sau dấu phẩy.

Ví dụ, NUMERIC(6, 2) cho phép lưu số tối đa 6 chữ số, trong đó 2 chữ số sau dấu phẩy.

Tạo bảng lưu giao dịch tài chính nè:

id description amount
1 Thanh toán học phí 2345.67
2 Học bổng hàng tháng 500.00
3 Phí phòng lab 145.99
4 Phạt thư viện 12.75
5 Đăng ký hội thảo 320.50

Giờ in danh sách giao dịch ra nhé:

SELECT description, amount
FROM transactions;

Kết quả:

description amount
Thanh toán học phí 2345.67
Học bổng hàng tháng 500.00
Phí phòng lab 145.99
Phạt thư viện 12.75
Đăng ký hội thảo 320.50

Khi nào dùng NUMERIC?

  • Tính toán tài chính (giá hàng hóa, lương...)
  • Lưu các phép đo chính xác (cân nặng, chiều dài...)

Bảng measurements

id mass - REAL height - REAL
1 70.5 1.83
2 64.2 1.75
3 82.3 1.92
4 55.0 1.60

Giờ in giá trị ra nhé:

SELECT mass, height
FROM measurements;

Kết quả:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

Khi nào dùng REAL?

  • Tính toán khoa học (khối lượng nguyên tử, khoảng cách tới Mặt Trăng...)
  • Mô phỏng dữ liệu, nơi sai số là chấp nhận được.

So sánh các kiểu số: dùng khi nào?

Kiểu dữ liệu Khoảng giá trị Độ chính xác Ví dụ ứng dụng
SMALLINT -32,768 đến 32,767 Số nguyên Số nhỏ (tuổi, điểm đánh giá...)
INTEGER -2,147,483,648 đến 2,147,483,647 Số nguyên Id, số lượng...
BIGINT -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807 Số nguyên Số siêu lớn.
NUMERIC Phụ thuộc precisionscale Số thập phân chính xác Tài chính, đo lường.
REAL Khoảng 6 chữ số thập phân Dấu phẩy động Dữ liệu xấp xỉ hoặc khoa học.
DOUBLE PRECISION Khoảng 15 chữ số thập phân Dấu phẩy động chính xác cao Khoa học, nghiên cứu.

Bí danh (alias)

Trong PostgreSQL, nhiều kiểu số có bí danh (alias) — là tên thay thế cho kiểu, giúp code dễ đọc hơn hoặc tương thích với các hệ quản trị khác.

Dưới đây là hướng dẫn ngắn gọn về alias kiểu số trong PostgreSQL:

Alias cho kiểu số nguyên

Alias Kiểu thật Kích thước Khoảng giá trị
INT INTEGER 4 byte −2,147,483,648 đến 2,147,483,647
INT4 INTEGER 4 byte (alias cũ)
SMALLINT SMALLINT 2 byte −32,768 đến 32,767
INT2 SMALLINT 2 byte
BIGINT BIGINT 8 byte −9 quintillion đến +9 quintillion
INT8 BIGINT 8 byte

Alias cho số chính xác

Alias Kiểu thật Mục đích
DEC NUMERIC Alias theo chuẩn SQL
DECIMAL NUMERIC Giống hệt

Alias cho số dấu phẩy động

Alias Kiểu thật Độ chính xác
FLOAT DOUBLE PRECISION ~15 chữ số (mặc định)
FLOAT(24) REAL ~6 chữ số
FLOAT(53) DOUBLE PRECISION ~15 chữ số
FLOAT8 DOUBLE PRECISION Alias cũ
FLOAT4 REAL Alias cũ

Lỗi thường gặp

Làm việc với kiểu số, bạn có thể gặp vài "bẫy" như sau:

Chọn kiểu dữ liệu không đủ. Nếu bạn dùng SMALLINT cho tuổi người, là sai đó. Robot trong "Matrix" mà tuổi hàng triệu năm thì buồn lắm luôn.

Mất dữ liệu khi làm tròn. Dùng REAL cho tính toán tài chính là mất tiền lẻ như chơi. Rồi mất luôn niềm tin khách hàng.

So sánh kiểu khác nhau. Nếu so INTEGER với REAL, có thể ra kết quả bất ngờ do cách số dấu phẩy động được lưu trữ.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION