MySQL - NULL 值
你好,有抱负的数据库爱好者们!今天,我们将深入探讨MySQL中NULL值的迷人世界。作为你友好的邻里计算机老师,我很兴奋能引导你完成这次旅程。所以,拿起你最喜欢的饮料,让我们一起开始吧!
MySQL中的NULL值
什么是NULL值?
在我们深入了解之前,让我们先理解NULL实际上意味着什么。在MySQL中,NULL表示一个缺失的或未知的值。这就像当你问你的朋友他们早餐吃了什么,他们回答说:“我不记得了。”那就是现实生活中的NULL值!
NULL不是零,空字符串或假。它是任何值的缺失。把它想象成一个占位符,说:“嘿,这里应该有东西,但我们还不知道是什么!”
为什么NULL值很重要?
NULL值在数据库管理中扮演着关键角色。它们允许我们:
- 表示缺失的信息
- 区分零和未知值
- 执行特定的操作和比较
让我们来看一个简单的例子:
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');
第二个插入将失败,因为我们没有为email
和hire_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