MySQL - Valori NULL

Ciao a tutti, appassionati di database in erba! Oggi esploreremo il mondo affascinante dei valori NULL in MySQL. Come il vostro insegnante di informatica del vicinato, sono entusiasta di guidarvi in questo viaggio. Allora, prendete una tazza della vostra bevanda preferita e iniziamo!

MySQL - NULL Values

I valori NULL in MySQL

Cos'è un valore NULL?

Prima di immergerci nei dettagli, capiamo cosa significa davvero NULL. In MySQL, NULL rappresenta un valore mancante o sconosciuto. È come quando chiedete al vostro amico cosa ha mangiato per colazione, e lui risponde: "Non mi ricordo." Questo è un valore NULL nella vita reale!

NULL non è zero, una stringa vuota o falso. È l'assenza di qualsiasi valore. Pensate a esso come a un segnaposto che dice: "Ehi, c'è qualcosa qui, ma non sappiamo cosa è ancora!"

Perché i valori NULL sono importanti?

I valori NULL giocano un ruolo cruciale nella gestione dei database. Loro ci permettono di:

  1. Rappresentare informazioni mancanti
  2. Distinguere tra zero e valori sconosciuti
  3. Eseguire operazioni e confronti specifici

Ecco un esempio semplice:

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

In questo esempio, non conosciamo il voto di Bob o l'età di Charlie. Invece di indovinare o inserire informazioni errate, utilizziamo NULL.

Creare una tabella senza valori NULL

Ora, cosa succede se vogliamo assicurarci che determinate colonne abbiano sempre un valore? È qui che entra in gioco il vincolo NOT NULL. È come dire ai vostri studenti: "Nessuna scusa per non consegnare i compiti!"

Creiamo una tabella in cui richiediamo che tutti i campi abbiano un valore:

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

In questa tabella, ogni colonna ha il vincolo NOT NULL. Se proviamo a inserire una riga senza fornire tutti i valori, MySQL rifiuterà cortesemente la nostra richiesta e lancerà un errore.

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

-- Questo fallirà
INSERT INTO employees (id, first_name, last_name) VALUES (2, 'Jane', 'Smith');

L'inserimento secondario fallirà perché non abbiamo fornito valori per email e hire_date, che sono campi NOT NULL.

Aggiornare valori NULL in una tabella

A volte, potremmo voler aggiornare i valori NULL nella nostra tabella. Forse abbiamo finalmente scoperto l'età di Charlie dal nostro esempio precedente. Ecco come possiamo farlo:

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

Ma cosa succede se vogliamo impostare un valore su NULL? Possiamo farlo anche noi, a patto che la colonna permetta valori NULL:

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

Ricordate, non potete impostare una colonna NOT NULL su NULL. È come cercare di cancellare un marchio indelebile – simply won't work!

Eliminare record con valori NULL

A volte, potremmo voler rimuovere i record che hanno valori NULL in certe colonne. Ecco come possiamo farlo:

DELETE FROM students WHERE grade IS NULL;

Notate che utilizziamo IS NULL invece di = NULL. Questo perché NULL non è un valore, quindi non possiamo usarlo con l'operatore di uguaglianza. È una delle peculiarità che rendono NULL speciale!

Valori NULL utilizzando un programma client

Quando si lavora con valori NULL in un programma client (come uno script PHP che si connette a MySQL), è importante gestirli correttamente. Ecco un esempio semplice in PHP:

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

// Creare connessione
$conn = new mysqli($servername, $username, $password, $dbname);

// Controllare connessione
if ($conn->connect_error) {
die("Connessione fallita: " . $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 risultati";
}
$conn->close();
?>

In questo script, utilizziamo l'operatore ternario per controllare se l'età o il voto è NULL, e se lo è, mostriamo rispettivamente "Unknown" o "Not graded".

Conclusione

Eccoci arrivati, gente! Abbiamo percorso il territorio dei valori NULL in MySQL. Ricordate, NULL non è nullità – è l'ignoto conosciuto, il punto interrogativo nel vostro database, il pezzo mancante del puzzle. Abbracciate il NULL, capiteelo e utilizzatelo saggiamente nelle vostre avventure nel database!

Prima di separarci, ecco una tabella utile che riassume i metodi discussi:

Metodo Descrizione Esempio
Creare colonne NOT NULL Assicura che una colonna abbia sempre un valore CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL);
Inserire valori NULL Aggiunge una riga con valori NULL (dove permesso) INSERT INTO students (id, name, age) VALUES (1, 'Alice', NULL);
Aggiornare a NULL Imposta un valore su NULL (dove permesso) UPDATE students SET grade = NULL WHERE name = 'Bob';
Aggiornare da NULL Sostituisce NULL con un valore UPDATE students SET age = 22 WHERE name = 'Charlie';
Eliminare record con NULL Rimuove le righe con NULL in colonne specificate DELETE FROM students WHERE grade IS NULL;
Controllare NULL Usa IS NULL o IS NOT NULL nelle query SELECT * FROM students WHERE age IS NOT NULL;

Buon codice, e che i vostri database siano sempre consapevoli del NULL!

Credits: Image by storyset