MySQL - NULL 值

你好,有抱负的数据库爱好者们!今天,我们将深入探讨MySQL中NULL值的迷人世界。作为你友好的邻里计算机老师,我很兴奋能引导你完成这次旅程。所以,拿起你最喜欢的饮料,让我们一起开始吧!

MySQL - NULL Values

MySQL中的NULL值

什么是NULL值?

在我们深入了解之前,让我们先理解NULL实际上意味着什么。在MySQL中,NULL表示一个缺失的或未知的值。这就像当你问你的朋友他们早餐吃了什么,他们回答说:“我不记得了。”那就是现实生活中的NULL值!

NULL不是零,空字符串或假。它是任何值的缺失。把它想象成一个占位符,说:“嘿,这里应该有东西,但我们还不知道是什么!”

为什么NULL值很重要?

NULL值在数据库管理中扮演着关键角色。它们允许我们:

  1. 表示缺失的信息
  2. 区分零和未知值
  3. 执行特定的操作和比较

让我们来看一个简单的例子:

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);

在这个例子中,我们不知道Bob的成绩或Charlie的年龄。我们不是猜测或输入错误的信息,而是使用NULL。

创建不允许NULL值的表

现在,如果我们想要确保某些列总是有值,该怎么办呢?这时,NOT NULL约束就派上用场了。这就像告诉你的学生:“不要找借口不交作业!”

让我们创建一个表,其中要求所有字段都有值:

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
);

在这个表中,每一列都有NOT NULL约束。如果我们尝试插入一行而不提供所有值,MySQL会礼貌地拒绝我们的请求并抛出一个错误。

-- 这将成功
INSERT INTO employees VALUES (1, 'John', 'Doe', '[email protected]', '2023-01-15');

-- 这将失败
INSERT INTO employees (id, first_name, last_name) VALUES (2, 'Jane', 'Smith');

第二个插入将失败,因为我们没有为emailhire_date提供值,它们是NOT NULL字段。

在表中更新NULL值

有时,我们可能想要更新表中的NULL值。也许我们终于找到了我们之前例子中Charlie的年龄。下面是如何操作:

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

但如果我们想要将某个值设置为NULL呢?只要列允许NULL值,我们也可以这样做:

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

记住,你不能将NOT NULL列设置为NULL。这就像试图擦除永久标记笔——就是不行!

删除具有NULL值的记录

有时,我们可能想要删除在特定列中具有NULL值的记录。下面是如何操作:

DELETE FROM students WHERE grade IS NULL;

注意我们使用IS NULL而不是= NULL。这是因为NULL不是一个值,所以我们不能用它来比较相等性。这是NULL的一个特性!

在客户端程序中使用NULL值

当在客户端程序(如连接到MySQL的PHP脚本)中处理NULL值时,正确处理它们非常重要。下面是一个简单的PHP例子:

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

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}

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

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "姓名: " . $row["name"]. " - 年龄: " .
($row["age"] === NULL ? "未知" : $row["age"]) .
" - 成绩: " . ($row["grade"] === NULL ? "未评分" : $row["grade"]) . "<br>";
}
} else {
echo "0条结果";
}
$conn->close();
?>

在这个脚本中,我们使用三元运算符来检查年龄或成绩是否为NULL,如果是,我们分别显示"未知"或"未评分"。

结论

好了,各位!我们已经一起穿越了MySQL中NULL值的领域。记住,NULL不是什么都没有——它是已知的未知,你数据库中的问号,谜题中缺失的一块。拥抱NULL,理解它,并在你的数据库冒险中明智地使用它!

在我们分手之前,这里有一个方便的表格,总结了我们讨论过的方法:

方法 描述 示例
创建NOT NULL列 确保列总是有值 CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL);
插入NULL值 在允许的情况下添加带有NULL值的行 INSERT INTO students (id, name, age) VALUES (1, 'Alice', NULL);
更新为NULL 在允许的情况下将值设置为NULL UPDATE students SET grade = NULL WHERE name = 'Bob';
从NULL更新 用值替换NULL UPDATE students SET age = 22 WHERE name = 'Charlie';
删除NULL记录 删除指定列中具有NULL值的行 DELETE FROM students WHERE grade IS NULL;
检查NULL 在查询中使用IS NULL或IS NOT NULL SELECT * FROM students WHERE age IS NOT NULL;

快乐编码,愿你的数据库永远对NULL有所了解!

Credits: Image by storyset