MySQL - Giá trị NULL

Xin chào các bạn, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng nhau lặn sâu vào thế giới kỳ diệu của các giá trị NULL trong MySQL. Là giáo viên máy tính hàng xóm thân thiện của bạn, tôi rất vui mừng được hướng dẫn bạn trong hành trình này. Hãy cầm một ly đồ uống yêu thích của bạn, và chúng ta cùng bắt đầu nhé!

MySQL - NULL Values

Các giá trị NULL trong MySQL

Giá trị NULL là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu rõ giá trị NULL thực sự có ý nghĩa gì. Trong MySQL, NULL đại diện cho một giá trị thiếu hoặc không biết. Nó giống như khi bạn hỏi bạn của bạn họ đã ăn gì cho bữa sáng, và họ nói, "Tôi không nhớ." Đó là giá trị NULL trong cuộc sống thực!

NULL không phải là zero, chuỗi trống hoặc false. Nó là sự vắng mặt của bất kỳ giá trị nào. Hãy nghĩ của nó như một placeholder nói, "Ồ, có điều gì đó ở đây, nhưng chúng ta không biết nó là gì!"

Tại sao các giá trị NULL lại quan trọng?

Các giá trị NULL đóng một vai trò quan trọng trong quản lý cơ sở dữ liệu. Chúng cho phép chúng ta:

  1. Đại diện cho thông tin thiếu sót
  2. Phân biệt giữa zero và giá trị không biết
  3. Thực hiện các thao tác và so sánh cụ thể

Hãy xem một ví dụ đơn giản:

CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
grade FLOAT
);

INSERT INTO students (id, name, age, grade) VALUES
(1, 'Alice', 20, 85.5),
(2, 'Bob', 21, NULL),
(3, 'Charlie', NULL, 92.0);

Trong ví dụ này, chúng ta không biết điểm của Bob hoặc tuổi của Charlie. Thay vì đoán hoặc điền thông tin sai, chúng ta sử dụng NULL.

Tạo bảng không có giá trị NULL

Bây giờ, nếu chúng ta muốn đảm bảo rằng một số cột luôn có giá trị, đó là khi约束 NOT NULL trở nên hữu ích. Nó giống như nói với học sinh của bạn, "Không có lý do nào cho việc không nộp bài tập về nhà!"

Hãy tạo một bảng mà tất cả các trường đều phải có giá trị:

CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
hire_date DATE NOT NULL
);

Trong bảng này, mỗi cột đều có约束 NOT NULL. Nếu chúng ta cố gắng chèn một hàng mà không cung cấp tất cả các giá trị, MySQL sẽ lịch sự từ chối yêu cầu của chúng ta và ném ra một lỗi.

-- Câu lệnh này sẽ thành công
INSERT INTO employees VALUES (1, 'John', 'Doe', '[email protected]', '2023-01-15');

-- Câu lệnh này sẽ thất bại
INSERT INTO employees (id, first_name, last_name) VALUES (2, 'Jane', 'Smith');

Câu lệnh thứ hai sẽ thất bại vì chúng ta không cung cấp giá trị cho emailhire_date, đây là các trường NOT NULL.

Cập nhật giá trị NULL trong bảng

Đôi khi, chúng ta có thể muốn cập nhật các giá trị NULL trong bảng của mình. Có lẽ chúng ta cuối cùng đã tìm ra tuổi của Charlie từ ví dụ trước. Dưới đây là cách chúng ta có thể làm điều đó:

UPDATE students SET age = 22 WHERE name = 'Charlie';

Nhưng nếu chúng ta muốn đặt giá trị thành NULL? Chúng ta cũng có thể làm điều đó, miễn là cột cho phép các giá trị NULL:

UPDATE students SET grade = NULL WHERE name = 'Alice';

Lưu ý rằng bạn không thể đặt một cột NOT NULL thành NULL. Điều đó giống như cố gắng xóa mực vĩnh viễn - nó chỉ đơn giản là không thể!

Xóa các bản ghi có giá trị NULL

Đôi khi, chúng ta có thể muốn xóa các bản ghi có giá trị NULL trong một số cột. Dưới đây là cách chúng ta có thể làm điều đó:

DELETE FROM students WHERE grade IS NULL;

Lưu ý rằng chúng ta sử dụng IS NULL thay vì = NULL. Điều này là vì NULL không phải là một giá trị, vì vậy chúng ta không thể sử dụng toán tử bình đẳng với nó. Đó là một trong những đặc điểm kỳ lạ của NULL!

Sử dụng giá trị NULL trong chương trình client

Khi làm việc với các giá trị NULL trong một chương trình client (như một đoạn mã PHP kết nối với MySQL), điều quan trọng là phải xử lý chúng đúng cách. Dưới đây là một ví dụ PHP đơn giản:

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $dbname);

// Kiểm tra kết nối
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM students";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Name: " . $row["name"]. " - Age: " .
($row["age"] === NULL ? "Unknown" : $row["age"]) .
" - Grade: " . ($row["grade"] === NULL ? "Not graded" : $row["grade"]) . "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>

Trong đoạn mã này, chúng ta sử dụng toán tử ba ngôi để kiểm tra xem tuổi hoặc điểm số có là NULL hay không, và nếu có, chúng ta hiển thị "Unknown" hoặc "Not graded" tương ứng.

Kết luận

Và đây bạn đã có, các bạn! Chúng ta đã cùng nhau hành trình qua vùng đất của các giá trị NULL trong MySQL. Nhớ rằng, NULL không phải là không có gì - nó là cái biết không biết, dấu hỏi trong cơ sở dữ liệu của bạn, mảnh ghép thiếu sót. Hãy đón nhận NULL, hiểu nó và sử dụng nó khôn ngoan trong các cuộc phiêu lưu cơ sở dữ liệu của bạn!

Trước khi chúng ta chia tay, đây là bảng tóm tắt các phương pháp chúng ta đã thảo luận:

Phương pháp Mô tả Ví dụ
Tạo cột NOT NULL Đảm bảo một cột luôn có giá trị CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL);
Chèn giá trị NULL Thêm một hàng với giá trị NULL (nếu được phép) INSERT INTO students (id, name, age) VALUES (1, 'Alice', NULL);
Cập nhật thành NULL Đặt giá trị thành NULL (nếu được phép) UPDATE students SET grade = NULL WHERE name = 'Bob';
Cập nhật từ NULL Thay thế NULL bằng giá trị UPDATE students SET age = 22 WHERE name = 'Charlie';
Xóa các bản ghi NULL Xóa các hàng có giá trị NULL trong cột xác định DELETE FROM students WHERE grade IS NULL;
Kiểm tra NULL Sử dụng IS NULL hoặc IS NOT NULL trong truy vấn SELECT * FROM students WHERE age IS NOT NULL;

Chúc các bạn mã hóa vui vẻ, và may mắn trong việc quản lý cơ sở dữ liệu NULL của bạn!

Credits: Image by storyset