MARIADB USEFUL RESOURCES
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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ệ.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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 khi ORDER 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 expr1expr2 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ặc COALESCE() 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ỉ định NULL hoặc NOT 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

Trên thực tế, NULL không phải là số 0 hay chuỗi rỗng; nó biểu thị một giá trị không xác định. Vì vậy, các toán tử so sánh thông thường (như =, >, <, …) không thể áp dụng trực tiếp với NULL. Để kiểm tra giá trị NULL, bạn nên sử dụng các toán tử đặc biệt như IS NULL, IS NOT NULL hoặc toán tử <=> (NULL-safe). Bên cạnh đó, các hàm IFNULL(), COALESCE()NULLIF() cung cấp cách xử lý NULL hiệu quả trong các truy vấn. Lưu ý rằng, MariaDB cho phép nhiều giá trị NULL trong chỉ mục UNIQUE, tuy nhiên, các khóa chính (PRIMARY KEY) không được chứa giá trị NULL.

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.

Cùng chuyên mục:

Biểu thức chính quy (Regular Expression) trong MariaDB

Biểu thức chính quy (Regular Expression) trong MariaDB

Quản lý dữ liệu trùng lặp trong MariaDB

Quản lý dữ liệu trùng lặp trong MariaDB

Dãy số (Sequences) trong MariaDB

Dãy số (Sequences) trong MariaDB

Table Cloning trong MariaDB

Table Cloning trong MariaDB

Bảng tạm (Temporary Tables) trong MariaDB

Bảng tạm (Temporary Tables) trong MariaDB

Indexes & Statistics Tables trong MariaDB

Indexes & Statistics Tables trong MariaDB

Alter Command trong MariaDB

Alter Command trong MariaDB

Transactions trong MariaDB

Transactions trong MariaDB

Biểu thức chính quy trong MariaDB

Biểu thức chính quy trong MariaDB

Mệnh đề JOIN trong MariaDB

Mệnh đề JOIN trong MariaDB

Mệnh đề ORDER BY trong MariaDB

Mệnh đề ORDER BY trong MariaDB

Mệnh đề LIKE trong MariaDB

Mệnh đề LIKE trong MariaDB

Câu lệnh DELETE trong MariaDB

Câu lệnh DELETE trong MariaDB

Câu lệnh UPDATE trong MariaDB

Câu lệnh UPDATE trong MariaDB

Mệnh đề WHERE trong MariaDB

Mệnh đề WHERE trong MariaDB

Các kiểu dữ liệu (Data Types) trong MariaDB

Các kiểu dữ liệu (Data Types) trong MariaDB

Tìm hiểu Select Database trong MariaDB

Tìm hiểu Select Database trong MariaDB

Xóa cơ sở dữ liệu trong MariaDB

Xóa cơ sở dữ liệu trong MariaDB

Tạo cơ sở dữ liệu (Database) trong MariaDB

Tạo cơ sở dữ liệu (Database) trong MariaDB

Cú pháp PHP trong MariaDB

Cú pháp PHP trong MariaDB

Top