MySQL - значения NULL

Здравствуйте, ambitные энтузиасты баз данных! Сегодня мы окунемся в fascинирующий мир значений NULL в MySQL. Как ваш доброжелательный сосед-преподаватель информатики, я рад помочь вам в этом путешествии. Так что возьмите кружку вашего любимого напитка и давайте начнем!

MySQL - NULL Values

Значения NULL в MySQL

Что такое значение NULL?

Прежде чем мы углубимся в детали, давайте поймем, что же такое NULL на самом деле. В MySQL NULL представляет собой пропущенное или неизвестное значение. Это как если бы вы спросили у друга, что он съел на завтрак, и он сказал: "Я не помню." Это и есть значение NULL в реальной жизни!

NULL не является нулём, пустой строкой или false. Это отсутствие какого-либо значения. Представьте его как метку, говорящую: "Здесь должно быть что-то, но мы пока не знаем что."

Why значения 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'a или возраст 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? Мы можем сделать это также, если столбец позволяет это:

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

Remember, вы не можете установить столбец с ограничением NOT NULL в NULL. Это как пытаться стереть permanent marker – это просто не работает!

Удаление записей с значениями NULL

Иногда мы можем захотеть удалить записи, у которых есть значения NULL в некоторых столбцах. Вот как мы можем это сделать:

DELETE FROM students WHERE grade IS NULL;

Обратите внимание, что мы используем IS NULL, а не = NULL. Это потому, что NULL не является значением, поэтому мы не можем использовать оператор равенства с ним. Это одна из тех особенностей, которые делают NULL особенным!

Использование значений NULL в клиентской программе

При работе с значениями NULL в клиентской программе (например, в PHP-скрипте, подключающемся к MySQL), важно правильно их обрабатывать. Вот простой пример на 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("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();
?>

В этом скрипте мы используем оператор ternary для проверки, является ли возраст или оценка NULL, и если да, отображаем "Unknown" или "Not graded" соответственно.

Заключение

И вот мы и arrived в стране значений NULL в MySQL. Помните, NULL – это не ничего – это известное неизвестное, вопросительный знак в вашей базе данных, пропущенная часть головоломки. Принимайте NULL, понимайте его и используйте его мудро в своих приключениях с базами данных!

Before мы расстанемся, вот удобная таблица, резюмирующая методы, которые мы обсуждали:

Метод Описание Пример
Создание столбцов 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-aware!

Credits: Image by storyset