Giá trị NULL trong MariaDB
Khi làm việc với giá trị NULL, hãy nhớ rằng NULL đại diện cho một giá trị không xác định. Nó không phải là chuỗi rỗng ("") hay số 0, vì cả hai đều là giá trị hợp lệ.

Trong quá trình tạo bảng (CREATE TABLE
), ta có thể chỉ định một cột có thể chứa NULL hoặc bắt buộc không được NULL bằng cách sử dụng mệnh đề NULL
hoặc NOT NULL
. Điều này rất hữu ích trong trường hợp có dữ liệu bị thiếu, chẳng hạn như ID không được cung cấp.
Cách NULL hoạt động trong MariaDB
- Biến do người dùng định nghĩa (
@var
) có giá trị NULL cho đến khi được gán một giá trị cụ thể. - Tham số trong thủ tục lưu trữ (Stored Procedure) và biến cục bộ có thể nhận giá trị NULL.
- Nếu một biến cục bộ không có giá trị mặc định, nó sẽ có giá trị NULL.
- NULL không phân biệt chữ hoa/thường và có thể được biểu diễn bằng các alias:
UNKNOWN
(dùng trong các biểu thức Boolean).\N
(có thể được sử dụng trong tập tin dữ liệu).
Toán tử làm việc với NULL trong MariaDB
Trong SQL, các toán tử so sánh thông thường (=
, >
, <
, !=
, >=
, <=
) không thể áp dụng cho NULL.
Ví dụ:
Bài viết này được đăng tại [free tuts .net]
SELECT * FROM users WHERE age = NULL;
Lỗi! Không thể so sánh NULL bằng =
. Kết quả sẽ luôn trả về NULL thay vì TRUE
hoặc FALSE
.
Cách đúng: Sử dụng các toán tử dành riêng cho NULL:
Toán tử | Chức năng |
---|---|
IS NULL |
Kiểm tra một giá trị có phải là NULL hay không. |
IS NOT NULL |
Kiểm tra một giá trị không phải là NULL. |
ISNULL(expression) |
Trả về 1 nếu giá trị là NULL, ngược lại trả về 0 . |
COALESCE(value1, value2, ..., valueN) |
Trả về giá trị đầu tiên không phải NULL trong danh sách. |
<=> (NULL-SAFE) |
So sánh hai giá trị, trả về TRUE nếu cả hai đều NULL. |
Ví dụ sử dụng toán tử NULL
SELECT * FROM customers WHERE email IS NULL; -- Lấy tất cả khách hàng không có email. SELECT * FROM orders WHERE delivery_date IS NOT NULL; -- Lấy các đơn hàng đã có ngày giao hàng. SELECT COALESCE(NULL, 'Giá trị mặc định'); -- Trả về 'Giá trị mặc định' vì giá trị đầu tiên là NULL. SELECT 5 <=> NULL; -- Trả về FALSE. SELECT NULL <=> NULL; -- Trả về TRUE.
Sắp xếp giá trị NULL trong MariaDB
- Khi sắp xếp dữ liệu (
ORDER BY
), NULL có giá trị thấp nhất, nên khiORDER BY DESC
, NULL sẽ xuất hiện ở cuối danh sách. - MariaDB cho phép thay đổi thứ tự NULL khi sắp xếp.
Ví dụ 1: Sắp xếp với NULL đứng đầu danh sách
SELECT column1 FROM product_tbl ORDER BY ISNULL(column1), column1;
- ISNULL(column1) giúp đặt giá trị NULL lên đầu khi sắp xếp.
Ví dụ 2: Sắp xếp với NULL ở cuối danh sách
SELECT column1 FROM product_tbl ORDER BY IF(column1 IS NULL, 0, 1), column1 DESC;
- IF(column1 IS NULL, 0, 1) sắp xếp giá trị NULL thấp hơn các giá trị khác.
Các hàm xử lý giá trị NULL trong MariaDB
Hàm | Chức năng |
---|---|
IFNULL(expr1, expr2) |
Nếu expr1 không phải NULL, trả về expr1 . Nếu expr1 là NULL, trả về expr2 . |
NULLIF(expr1, expr2) |
Nếu expr1 và expr2 bằng nhau, trả về NULL, ngược lại trả về expr1 . |
COALESCE(expr1, expr2, ..., exprN) |
Trả về giá trị đầu tiên không phải NULL trong danh sách. |
SUM() , AVG() |
Tự động bỏ qua giá trị NULL khi tính tổng hoặc trung bình. |
Ví dụ sử dụng hàm xử lý NULL
SELECT IFNULL(NULL, 'Giá trị mặc định'); -- Kết quả: 'Giá trị mặc định' SELECT IFNULL('Hello', 'Giá trị mặc định'); -- Kết quả: 'Hello' SELECT NULLIF(5, 5); -- Kết quả: NULL SELECT NULLIF(5, 10); -- Kết quả: 5 SELECT COALESCE(NULL, NULL, 'MariaDB', 'SQL'); -- Kết quả: 'MariaDB' SELECT COALESC
Chèn giá trị NULL vào bảng trong MariaDB
- Nếu cột có ràng buộc
NOT NULL
, việc chèn giá trị NULL sẽ gây lỗi. - Nếu không có ràng buộc
NOT NULL
, có thể chèn NULL bình thường.
Ví dụ: Chèn NULL hợp lệ
INSERT INTO employees (id, name, email) VALUES (1, 'Nguyen Van A', NULL);
Ví dụ: Chèn NULL vào cột NOT NULL
gây lỗi
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL ); INSERT INTO users (id, name, email) VALUES (2, 'Tran Van B', NULL);
Lỗi! Cột email
không được phép NULL.
Cách khắc phục:
- Cung cấp giá trị mặc định (
DEFAULT 'example@email.com'
). - Dùng
IFNULL()
hoặcCOALESCE()
khi chèn dữ liệu.
NULL trong khóa chính và khóa duy nhất trong MariaDB
- Khóa chính (
PRIMARY KEY
) không thể chứa NULL. - Khóa duy nhất (
UNIQUE
) có thể chứa nhiều giá trị NULL.
Ví dụ: NULL trong UNIQUE INDEX
CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, code VARCHAR(50) UNIQUE ); INSERT INTO products (code) VALUES (NULL); -- Chèn NULL hợp lệ INSERT INTO products (code) VALUES (NULL); -- Chèn NULL hợp lệ lần nữa
MariaDB cho phép nhiều giá trị NULL trong UNIQUE INDEX.
NULL và lệnh ALTER TABLE trong MariaDB
- Khi sử dụng
ALTER TABLE
để thay đổi cột, nếu không chỉ địnhNULL
hoặcNOT NULL
, MariaDB sẽ tự động gán giá trị mặc định.
Ví dụ: Thêm cột mà không chỉ định NULL
ALTER TABLE employees ADD COLUMN phone_number VARCHAR(20);
Kết quả: Cột mới phone_number
có thể chứa NULL theo mặc định.
Muốn đặt mặc định là NOT NULL?
ALTER TABLE employees MODIFY COLUMN phone_number VARCHAR(20) NOT NULL;
Kết bài
Giá trị NULL trong MariaDB không phải là 0 hoặc chuỗi rỗng, mà là một giá trị chưa xác định. Việc sử dụng các toán tử như `IS NULL`, `IS NOT NULL`, và `<=>` giúp kiểm tra và xử lý NULL một cách chính xác trong các truy vấn. Các hàm như `IFNULL()`, `COALESCE()`, và `NULLIF()` hỗ trợ xử lý NULL hiệu quả, đảm bảo truy vấn của bạn luôn linh hoạt và chính xác. MariaDB cho phép chứa nhiều NULL trong chỉ mục UNIQUE nhưng không cho phép trong khóa chính. Hiểu rõ cách làm việc với NULL sẽ giúp bạn khai thác tối đa sức mạnh của MariaDB và tối ưu hóa các truy vấn. trong trong giây lát
Như vậy, nắm vững cách xử lý NULL sẽ giúp bạn viết các truy vấn chính xác và tối ưu hơn, từ đó cải thiện hiệu suất cũng như độ tin cậy của cơ sở dữ liệu.