MySQL - Valeurs NULL

Bonjour à tous, aspirants passionnés de bases de données ! Aujourd'hui, nous allons plonger dans le monde fascinant des valeurs NULL dans MySQL. En tant que votre enseignant de informatique bienveillant du quartier, je suis excité de vous guider dans ce voyage. Alors, prenez une tasse de votre boisson favorite, et c'est parti !

MySQL - NULL Values

Les valeurs NULL dans MySQL

Qu'est-ce qu'une valeur NULL ?

Avant de rentrer dans les détails, comprenons ce qu'est réellement NULL. Dans MySQL, NULL représente une valeur manquante ou inconnue. C'est comme quand vous demandez à votre ami ce qu'il a mangé pour le petit-déjeuner, et il répond : "Je ne me souviens pas." Voilà une valeur NULL dans la vie réelle !

NULL n'est pas zéro, une chaîne vide ou faux. C'est l'absence de toute valeur. Pensez-y comme un placeholder disant : "Eh, il devrait y avoir quelque chose ici, mais on ne sait pas encore ce que c'est !"

Pourquoi les valeurs NULL sont-elles importantes ?

Les valeurs NULL jouent un rôle crucial dans la gestion des bases de données. Elles nous permettent de :

  1. Representer des informations manquantes
  2. Distinguer entre zéro et des valeurs inconnues
  3. Effectuer des opérations et des comparaisons spécifiques

Regardons un exemple simple :

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

Dans cet exemple, nous ne connaissons pas la note de Bob ni l'âge de Charlie. Au lieu de deviner ou de mettre des informations incorrectes, nous utilisons NULL.

Créer une table sans valeurs NULL

Que se passe-t-il si nous voulons nous assurer que certaines colonnes ont toujours une valeur ? C'est là que la contrainte NOT NULL entre en jeu. C'est comme dire à vos élèves : "Pas d'excuses pour ne pas rendre votre devoir !"

Créons une table où nous exigeons que tous les champs aient une valeur :

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

Dans cette table, chaque colonne a la contrainte NOT NULL. Si nous essayons d'insérer une ligne sans fournir toutes les valeurs, MySQL refusera poliment notre demande et lancera une erreur.

-- Cela fonctionnera
INSERT INTO employees VALUES (1, 'John', 'Doe', '[email protected]', '2023-01-15');

-- Cela échouera
INSERT INTO employees (id, first_name, last_name) VALUES (2, 'Jane', 'Smith');

L'insertion secondaire échouera car nous n'avons pas fourni de valeurs pour email et hire_date, qui sont des champs NOT NULL.

Mettre à jour les valeurs NULL dans une table

Parfois, nous pourrions vouloir mettre à jour des valeurs NULL dans notre table. Peut-être avons-nous finalement découvert l'âge de Charlie dans notre exemple précédent. Voici comment nous pouvons le faire :

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

Mais que faire si nous voulons définir une valeur sur NULL ? Nous pouvons le faire également, à condition que la colonne autorise les valeurs NULL :

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

Souvenez-vous, vous ne pouvez pas définir une colonne NOT NULL sur NULL. C'est comme essayer d'effacer un marqueur permanent - ça ne marchera pas !

Supprimer les enregistrements avec des valeurs NULL

Parfois, nous pourrions vouloir supprimer des enregistrements qui ont des valeurs NULL dans certaines colonnes. Voici comment nous pouvons le faire :

DELETE FROM students WHERE grade IS NULL;

Notez que nous utilisons IS NULL plutôt que = NULL. C'est parce que NULL n'est pas une valeur, donc nous ne pouvons pas utiliser l'opérateur d'égalité avec lui. C'est l'un des particularismes qui rendent NULL spécial !

Valeurs NULL dans un programme client

Lorsque vous travaillez avec des valeurs NULL dans un programme client (comme un script PHP se connectant à MySQL), il est important de les gérer correctement. Voici un exemple simple en PHP :

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

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
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();
?>

Dans ce script, nous utilisons l'opérateur ternaire pour vérifier si l'âge ou la note est NULL, et si oui, nous affichons "Unknown" ou "Not graded" respectivement.

Conclusion

Et voilà, amis ! Nous avons parcouru le pays des valeurs NULL dans MySQL. Souvenez-vous, NULL n'est pas rien - c'est l'inconnu connu, le point d'interrogation dans votre base de données, la piece manquante du puzzle. Embrassez le NULL, comprenez-le, et utilisez-le sagement dans vos aventures de bases de données !

Avant de nous séparer, voici un tableau pratique résumant les méthodes que nous avons discutées :

Méthode Description Exemple
Créer des colonnes NOT NULL Assure qu'une colonne a toujours une valeur CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL);
Insérer des valeurs NULL Ajoute une ligne avec des valeurs NULL (lorsqu'elles sont autorisées) INSERT INTO students (id, name, age) VALUES (1, 'Alice', NULL);
Mettre à jour vers NULL Définit une valeur sur NULL (lorsqu'il est autorisé) UPDATE students SET grade = NULL WHERE name = 'Bob';
Mettre à jour depuis NULL Remplace NULL par une valeur UPDATE students SET age = 22 WHERE name = 'Charlie';
Supprimer les enregistrements avec des valeurs NULL Supprime les lignes avec des valeurs NULL dans les colonnes spécifiées DELETE FROM students WHERE grade IS NULL;
Vérification des valeurs NULL Utilise IS NULL ou IS NOT NULL dans les requêtes SELECT * FROM students WHERE age IS NOT NULL;

Bonne programmation, et puissent vos bases de données être toujours conscientes des NULL !

Credits: Image by storyset