Benvenuti nella UF2: MySQL
Complimenti per aver completato la prima Unità Formativa! Nelle lezioni precedenti hai imparato i concetti fondamentali della programmazione: variabili, tipi di dati, funzioni e algoritmi. Ora è il momento di fare il grande salto nel mondo dei database.
Cos'è un database?
Un database è un sistema organizzato per memorizzare, gestire e recuperare dati in modo efficiente. Pensa a un database come a un archivio digitale strutturato dove puoi conservare informazioni di qualsiasi tipo: utenti, prodotti, ordini, contatti, ecc.
MySQL è uno dei sistemi di gestione database più diffusi al mondo, utilizzato da milioni di applicazioni web (Facebook, YouTube, WordPress, e-commerce). In questa UF2 imparerai a:
- Creare e gestire database e tabelle
- Definire tipi di dati e vincoli
- Stabilire relazioni tra tabelle
- Eseguire query per interrogare e modificare dati
- Gestire privilegi e sicurezza degli utenti
Perché usare MySQL?
MySQL non è l'unico sistema di gestione database disponibile, ma è tra i più scelti per progetti di ogni dimensione. Ecco i quattro motivi principali che lo rendono così popolare.
Velocità e prestazioni
MySQL è ottimizzato per gestire milioni di record con tempi di risposta rapidissimi.
Affidabilità
Supporta transazioni ACID per garantire l'integrità dei dati anche in caso di errori.
Open Source
Gratuito e con una community globale che produce tutorial, plugin e supporto.
Scalabilità
Si adatta da piccoli progetti personali a grandi applicazioni enterprise.
Architettura di MySQL
MySQL segue un'architettura client-server. Ecco come funziona:
┌─────────────────┐
│ APPLICAZIONE │ ← Client (la tua app, sito web, script)
└────────┬────────┘
│ Query SQL
↓
┌─────────────────┐
│ SERVER MYSQL │ ← Elabora richieste, gestisce dati
└────────┬────────┘
│
↓
┌─────────────────┐
│ DATABASE 1 │
│ ┌───────────┐ │
│ │ Tabella A │ │
│ │ Tabella B │ │
│ └───────────┘ │
└─────────────────┘
┌─────────────────┐
│ DATABASE 2 │
└─────────────────┘
Concetti chiave
- Server MySQL: il "motore" che gestisce tutti i database
- Database: contenitore logico per un insieme di tabelle correlate
- Tabella: struttura che organizza i dati in righe e colonne
- Query SQL: istruzioni per comunicare con il database
Installazione e primo accesso
Per lavorare con MySQL, ti servirà installare il server sul tuo computer. L'opzione più semplice per iniziare è utilizzare XAMPP, un pacchetto gratuito che include MySQL, Apache e strumenti di gestione.
Download XAMPP
- Vai su apachefriends.org
- Scarica la versione per il tuo sistema operativo (Windows/Mac/Linux)
- Installa seguendo la procedura guidata
- Avvia il pannello di controllo XAMPP
- Clicca su "Start" accanto a MySQL
Accedere alla console MySQL
Una volta avviato MySQL, puoi accedere alla console tramite:
# Da terminale/prompt dei comandi
mysql -u root -p
# Ti verrà chiesta la password (di default è vuota, premi INVIO)
Oppure usa phpMyAdmin, l'interfaccia grafica inclusa in XAMPP:
- Apri il browser e vai su
http://localhost/phpmyadmin - Login automatico (user: root, password vuota)
Sicurezza
In un ambiente di produzione, NON lasciare mai la password di root vuota! Imposta sempre una password forte per proteggere i tuoi database.
Creare il primo database
Un database è come una cartella che contiene tutte le tabelle correlate a un progetto. Ad esempio, per un e-commerce potresti avere un database "negozio_online" con tabelle per clienti, prodotti, ordini, ecc.
Sintassi CREATE DATABASE
CREATE DATABASE nome_database;
Esempio pratico
-- Creare un database per gestire una scuola
CREATE DATABASE scuola;
-- Verificare che sia stato creato
SHOW DATABASES;
-- Selezionare il database per usarlo
USE scuola;
Convenzioni di naming
- Usa nomi descrittivi e in minuscolo:
negozio_online,biblioteca - Evita spazi (usa underscore _):
gestione_magazzinosì,gestione magazzinono - Evita caratteri speciali e accenti:
utentisì,ütéñtìno
Altri comandi utili
-- Eliminare un database (ATTENZIONE: operazione irreversibile!)
DROP DATABASE scuola;
-- Creare un database solo se non esiste già
CREATE DATABASE IF NOT EXISTS scuola;
-- Specificare il charset (importante per caratteri accentati)
CREATE DATABASE scuola
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Best practice
Usa sempre utf8mb4 come charset per supportare tutti i caratteri Unicode, inclusi emoji e caratteri speciali internazionali.
Tabelle: la struttura dei dati
Una tabella è la struttura fondamentale che contiene i dati. È organizzata in:
- Colonne (campi): definiscono il tipo di dato memorizzato
- Righe (record): contengono i valori effettivi
Esempio visivo: tabella "studenti"
| id | nome | cognome | età | classe |
|---|---|---|---|---|
| 1 | Mario | Rossi | 16 | 3A |
| 2 | Laura | Bianchi | 17 | 4B |
| 3 | Giuseppe | Verdi | 15 | 2C |
Chiave primaria (PRIMARY KEY)
Il campo id è la chiave primaria: identifica univocamente ogni record. Non possono esistere due studenti con lo stesso id!
Sintassi CREATE TABLE
CREATE TABLE nome_tabella (
nome_campo1 TIPO_DATO [opzioni],
nome_campo2 TIPO_DATO [opzioni],
...
);
Esempio completo
USE scuola;
CREATE TABLE studenti (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(50) NOT NULL,
cognome VARCHAR(50) NOT NULL,
eta INT,
classe VARCHAR(10),
data_iscrizione DATE DEFAULT CURDATE()
);
Spiegazione
AUTO_INCREMENT: MySQL assegna automaticamente un numero progressivoPRIMARY KEY: definisce questo campo come identificatore univocoNOT NULL: il campo è obbligatorioDEFAULT CURDATE(): se non specifichi una data, usa quella odierna
Tipi di dati in MySQL
MySQL supporta molti tipi di dati. Ecco i più comuni:
Tipi numerici
| Tipo | Descrizione | Intervallo | Esempio |
|---|---|---|---|
INT |
Numero intero | -2.147.483.648 a 2.147.483.647 | Età, quantità |
TINYINT |
Intero piccolo | -128 a 127 (o 0-255 se UNSIGNED) | Voti da 0 a 100 |
DECIMAL(M,D) |
Decimale preciso | M=cifre totali, D=decimali | Prezzi: DECIMAL(10,2) |
FLOAT |
Decimale approssimato | Numeri in virgola mobile | Coordinate GPS |
Tipi stringa/testo
| Tipo | Descrizione | Lunghezza Max | Esempio |
|---|---|---|---|
VARCHAR(n) |
Stringa variabile | 1 - 65.535 caratteri | Nome, email, indirizzo |
CHAR(n) |
Stringa fissa | 1 - 255 caratteri | Codici fiscali (16 char) |
TEXT |
Testo lungo | 65.535 caratteri | Descrizioni, articoli |
MEDIUMTEXT |
Testo molto lungo | 16 milioni di caratteri | Contenuti HTML/JSON |
Tipi data/ora
| Tipo | Formato | Esempio |
|---|---|---|
DATE |
YYYY-MM-DD | 2025-01-08 |
TIME |
HH:MM:SS | 14:30:00 |
DATETIME |
YYYY-MM-DD HH:MM:SS | 2025-01-08 14:30:00 |
TIMESTAMP |
Come DATETIME (auto-update) | Per tracciare modifiche |
Tipi speciali
| Tipo | Descrizione | Esempio |
|---|---|---|
BOOLEAN |
Vero/Falso (alias di TINYINT(1)) | attivo, confermato |
ENUM('val1','val2'...) |
Lista di valori predefiniti | ENUM('M','F') per sesso |
JSON |
Dati in formato JSON | Configurazioni, metadata |
Scegliere il tipo giusto
- Usa
VARCHARper lunghezze variabili (nomi, indirizzi) - Usa
CHARper lunghezze fisse (codici, sigle) - Usa
DECIMALper valori monetari (mai FLOAT!) - Usa
TINYINTinvece di INT per numeri piccoli (risparmia spazio)
Vincoli (Constraints)
I vincoli sono regole che garantiscono l'integrità dei dati. Impediscono l'inserimento di dati non validi o incoerenti.
| Vincolo | Descrizione | Esempio |
|---|---|---|
PRIMARY KEY |
Identifica univocamente ogni record | id INT PRIMARY KEY |
NOT NULL |
Il campo non può essere vuoto | email VARCHAR(100) NOT NULL |
UNIQUE |
Valori univoci (no duplicati) | username VARCHAR(50) UNIQUE |
DEFAULT |
Valore predefinito se non specificato | stato VARCHAR(20) DEFAULT 'attivo' |
AUTO_INCREMENT |
Incremento automatico (per ID) | id INT AUTO_INCREMENT |
CHECK |
Condizione che deve essere vera | eta INT CHECK (eta >= 18) |
Esempio con vincoli combinati
CREATE TABLE utenti (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
eta INT CHECK (eta >= 13),
attivo BOOLEAN DEFAULT 1,
data_registrazione TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Perché usare i vincoli?
- Integrità dei dati: prevengono errori di inserimento
- Coerenza: garantiscono che i dati seguano regole specifiche
- Performance: gli indici (PRIMARY KEY, UNIQUE) velocizzano le ricerche
- Manutenzione: riducono la necessità di validazione lato applicazione
Esercizi pratici
Metti in pratica ciò che hai imparato con questi esercizi. Usa la console MySQL o phpMyAdmin.
Esercizio 1: Biblioteca
Crea un database biblioteca con una tabella libri che contenga:
- id (chiave primaria, auto-incrementante)
- titolo (massimo 200 caratteri, obbligatorio)
- autore (massimo 100 caratteri, obbligatorio)
- anno_pubblicazione (numero intero)
- isbn (13 caratteri, univoco)
- disponibile (booleano, default TRUE)
Esercizio 2: E-commerce
Crea un database negozio con una tabella prodotti:
- id (chiave primaria)
- nome_prodotto (obbligatorio)
- descrizione (testo lungo)
- prezzo (decimale con 2 cifre decimali, obbligatorio)
- quantita_disponibile (intero, default 0)
- categoria (ENUM: 'Elettronica', 'Abbigliamento', 'Casa', 'Sport')
- data_inserimento (timestamp automatico)
Esercizio 3: Social Network
Crea un database social con una tabella post:
- id (chiave primaria)
- user_id (intero, obbligatorio - rappresenta l'autore)
- contenuto (testo medio)
- numero_like (intero, default 0)
- numero_commenti (intero, default 0)
- pubblicato (booleano, default FALSE)
- data_creazione (datetime, valore automatico)
Suggerimento
Dopo aver creato le tabelle, usa il comando DESCRIBE nome_tabella; per verificare la struttura e assicurarti che tutto sia corretto!
Riepilogo della lezione
In questa lezione hai imparato:
Punti chiave
- Cos'è MySQL e perché è importante
- L'architettura client-server dei database
- Come installare MySQL (XAMPP) e accedere alla console
- Creare database con
CREATE DATABASE - Creare tabelle con
CREATE TABLE - Tipi di dati: numerici, stringhe, date, speciali
- Vincoli: PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT, AUTO_INCREMENT, CHECK
Nella prossima lezione scoprirai come inserire, modificare e interrogare dati con le query SQL fondamentali:INSERT,SELECT,UPDATE,DELETE. Imparerai anche a creare relazioni tra tabelle con le chiavi esterne (FOREIGN KEY).
Vuoi approfondire la programmazione con un percorso completo?
Scopri i corsi e la formazione di Federico Boggia su programmazione, dati e digitale.