Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cột INT trong MySQL có thể lưu NULL không?

Có. Cột kiểu INT (và các kiểu số khác) trong MySQL **mặc định cho phép NULL** trừ khi bạn khai báo rõ ràng NOT NULL.

Cú pháp

-- Cho phép NULL (mặc định)
CREATE TABLE bang (cot_so INT);

-- Không cho phép NULL
CREATE TABLE bang (cot_so INT NOT NULL);

Ví dụ minh họa

1. Tạo bảng với cột INT cho phép NULL

CREATE TABLE nullableIntDemo (
    Id INT NOT NULL AUTO_INCREMENT,
    Price INT,  -- Không có NOT NULL → cho phép NULL
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu có NULL

INSERT INTO nullableIntDemo(Price) VALUES(NULL);
INSERT INTO nullableIntDemo(Price) VALUES(100);
INSERT INTO nullableIntDemo(Price) VALUES(200);
INSERT INTO nullableIntDemo(Price) VALUES(NULL);
INSERT INTO nullableIntDemo(Price) VALUES(NULL);

3. Kiểm tra dữ liệu

SELECT * FROM nullableIntDemo;

Kết quả:

+----+-------+
| Id | Price |
+----+-------+
| 1  | NULL  |
| 2  | 100   |
| 3  | 200   |
| 4  | NULL  |
| 5  | NULL  |
+----+-------+

So sánh: NULL vs 0 vs Rỗng

Giá trịÝ nghĩaKiểu dữ liệu
NULLChưa biết, không có giá trị, missingTất cả kiểu
0Giá trị số 0 (có nghĩa: bằng 0)Số (INT, DECIMAL...)
''Chuỗi rỗng (khác NULL)Chuỗi (VARCHAR, TEXT)

Xử lý NULL trong tính toán

Vấn đề: Mọi phép toán với NULL đều trả về NULL.

SELECT 10 + NULL;     -- NULL
SELECT NULL > 5;      -- NULL (không phải TRUE/FALSE)
SELECT AVG(Price) FROM nullableIntDemo;  -- Bỏ qua NULL, tính TB của 100,200 = 150

Giải pháp: Dùng COALESCE hoặc IFNULL:

SELECT COALESCE(Price, 0) FROM nullableIntDemo;  -- NULL → 0
SELECT SUM(COALESCE(Price, 0)) FROM nullableIntDemo;

Best Practice

  • Mặc định NOT NULL cho cột số nếu logic nghiệp vụ không cần "chưa biết"
  • Dùng DEFAULT 0 thay vì NULL cho các cột tiền tệ, số lượng, điểm số
  • Chỉ dùng NULL khi có ý nghĩa nghiệp vụ rõ ràng: "chưa cập nhật", "không áp dụng", "chưa biết"
  • Index trên cột NULL: MySQL cho phép, nhưng giá trị NULL không được index trong một số engine

Kiểm tra định nghĩa cột

SHOW COLUMNS FROM nullableIntDemo LIKE 'Price';

Kết quả: Null = YES → cho phép NULL.