Home/ Corsi/ Programmazione/ Lezione 3: Introduzione a MySQL

Lezione 3: Introduzione a MySQL

UF2: cos'è un database, perché usare MySQL, l'architettura client-server, l'installazione con XAMPP, la creazione di database e tabelle, i tipi di dati, i vincoli ed esercizi pratici con SQL.

Introduzione a MySQL: database, tabelle e SQL
Indice dei contenuti
UF 2 - MySQL 6 ore

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

  1. Vai su apachefriends.org
  2. Scarica la versione per il tuo sistema operativo (Windows/Mac/Linux)
  3. Installa seguendo la procedura guidata
  4. Avvia il pannello di controllo XAMPP
  5. 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_magazzino sì, gestione magazzino no
  • Evita caratteri speciali e accenti: utenti sì, ü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 progressivo
  • PRIMARY KEY: definisce questo campo come identificatore univoco
  • NOT NULL: il campo è obbligatorio
  • DEFAULT 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 VARCHAR per lunghezze variabili (nomi, indirizzi)
  • Usa CHAR per lunghezze fisse (codici, sigle)
  • Usa DECIMAL per valori monetari (mai FLOAT!)
  • Usa TINYINT invece 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!

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.

Vai ai corsi