Unità Formativa 2 - MySQL

Introduzione a MySQL

Database, Tabelle e Primi Passi con SQL

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?

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_magazzinogestione magazzino
• Evita caratteri speciali e accenti: utentiütéñtì

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!

Riepilogo della Lezione

In questa lezione hai imparato:

  • 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).