MySQL - Versioni

Ciao, appassionati di database in erba! Sono entusiasta di guidarvi attraverso il mondo affascinante delle versioni di MySQL. Come il vostro amico insegnante di informatica di quartiere con anni di esperienza, mi assicurerò che navigiamo in questo argomento con facilità e divertimento. Allora, prendete i vostri block notes virtuali e tuffiamoci!

MySQL - Versions

Versioni di MySQL

MySQL, come un buon vino, è migliorato con l'età. Dalla sua inception nel 1995, ha subito numerose aggiornamenti e miglioramenti. Prendiamo un rapido viaggio attraverso alcune delle versioni principali:

MySQL 3.23 (2001)

Questa versione è stata un game-changer, introducendo funzionalità come:

  • Indicizzazione full-text
  • Replicazione
  • Cache delle query

MySQL 4.0 (2003)

Questa release ha portato alcune aggiunte interessanti:

  • Query di unione
  • Sottquery
  • Funzioni GIS

MySQL 5.0 (2005)

Un traguardo importante, che introduce:

  • Procedure memorizzate
  • Viste
  • Trigger

MySQL 5.5 (2010)

Questa versione si è concentrata sui miglioramenti delle prestazioni:

  • InnoDB come motore di archiviazione predefinito
  • Replicazione semi-sincrona

MySQL 5.6 (2013)

Migliorando le prestazioni e la scalabilità:

  • Operazioni DDL online
  • Migliorata la prestazione della replicazione

MySQL 5.7 (2015)

Un aggiornamento significativo con:

  • Supporto JSON
  • Funzionalità di sicurezza migliorate
  • Miglioramenti dello schema delle prestazioni

MySQL 8.0 (2018)

L'ultima versione principale, che esploreremo più nel dettaglio tra poco!

Funzionalità Aggiunte in MySQL 8.0

MySQL 8.0 è come il supereroe delle versioni di database, carico di nuovi poteri e capacità. Esploriamo alcune delle sue funzionalità più cool:

1. Document Store

MySQL ora supporta la memorizzazione e la query di documenti JSON, rendendolo un database ibrido relazionale e documentale. Ecco un esempio semplice:

CREATE TABLE products (
id INT PRIMARY KEY,
details JSON
);

INSERT INTO products VALUES (1, '{"name": "Laptop", "price": 999.99, "specs": {"RAM": "16GB", "CPU": "i7"}}');

SELECT JSON_EXTRACT(details, '$.name') AS product_name
FROM products
WHERE JSON_EXTRACT(details, '$.price') < 1000;

Questo codice crea una tabella con una colonna JSON, inserisce un prodotto con dettagli nidificati e poi lo query basato su una proprietà JSON.

2. Funzioni di Finestra

Le funzioni di finestra ti permettono di eseguire calcoli su un set di righe correlate alla riga corrente. Ecco un esempio:

SELECT
product_name,
category,
price,
AVG(price) OVER (PARTITION BY category) AS avg_category_price
FROM products;

Questa query calcola il prezzo medio per ciascuna categoria accanto ai prezzi individuali dei prodotti.

3. Espressioni di Tabella Comuni (CTEs)

Le CTE rendono le query complesse più leggibili. Ecco un esempio semplice:

WITH high_value_customers AS (
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 10000
)
SELECT c.name, c.email
FROM customers c
JOIN high_value_customers hvc ON c.id = hvc.customer_id;

Questa query definisce prima una CTE per i clienti ad alto valore, poi la utilizza nella query principale.

4. Indici Invisibili

Ora puoi rendere gli indici invisibili per scopi di test:

ALTER TABLE customers ALTER INDEX idx_email INVISIBLE;

Questo ti permette di testare l'impatto di un indice senza rimuoverlo fisicamente.

5. Miglioramenti dei Ruoli SQL

MySQL 8.0 introduce un controllo degli accessi basato su ruoli più robusto:

CREATE ROLE 'app_developer', 'app_read', 'app_write';

GRANT SELECT ON app_db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';

GRANT 'app_read', 'app_write' TO 'app_developer';

CREATE USER 'jane'@'localhost' IDENTIFIED BY 'password123';
GRANT 'app_developer' TO 'jane'@'localhost';

Questo esempio crea ruoli con diverse autorizzazioni e li assegna a un utente.

Funzionalità Deprecate in MySQL 8.0

Mentre MySQL evolve, alcune funzionalità diventano obsolete. È come pulire il guardaroba - a volte devi fare spazio per le nuove cose! Ecco alcune funzionalità deprecate in MySQL 8.0:

Funzionalità Deprecata Sostituzione/Alternativa
Opzione --skip-symbolic-links --skip-symlink
Funzione ENCRYPT() Usa AES_ENCRYPT()
Funzioni DES_ENCRYPT() e DES_DECRYPT() Usa AES_ENCRYPT() e AES_DECRYPT()
Funzione FOUND_ROWS() Usa la clausola SELECT con LIMIT
SQL_CALC_FOUND_ROWS Usa SELECT COUNT(*)

Ricorda, "deprecato" non significa che queste funzionalità sono sparite da un giorno all'altro. È più una gentile avvertenza che potrebbero non essere presenti nelle versioni future, quindi è meglio iniziare a utilizzare le alternative.

In conclusione, MySQL 8.0 è come un coltello svizzero per la gestione dei database - carico di strumenti potenti e semplificando alcuni degli strumenti più vecchi. Continuando il vostro viaggio con MySQL, ricordate che ogni versione porta nuove possibilità e miglioramenti. Rimanete curiosi, continuate a sperimentare e, soprattutto, divertitevi con i vostri database!

Credits: Image by storyset