Lo Struc­tu­red Query Language, in breve SQL (in italiano: “lin­guag­gio di in­ter­ro­ga­zio­ne strut­tu­ra­to”), è uno dei più noti linguaggi di pro­gram­ma­zio­ne. Si tratta di un’in­ter­fac­cia uni­ver­sa­le per lavorare con database re­la­zio­na­li o sistemi di gestione di database re­la­zio­na­li (RDBMS). Questo lin­guag­gio contiene un tale numero di comandi SQL da poter creare con­fu­sio­ne. Vi pre­sen­tia­mo i più im­por­tan­ti il­lu­stran­do i modelli che ne sono alla base.

Registra il tuo dominio
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa
Consiglio

Abbiamo preparato un altro articolo con un’in­tro­du­zio­ne a SQL e una serie di esempi, in cui spie­ghia­mo come pro­gram­ma­re con SQL.

Che cosa sono i comandi SQL?

I comandi SQL im­par­ti­sco­no al sistema di gestione dei database (DBMS) l’istru­zio­ne di eseguire de­ter­mi­na­te azioni. Ad esempio, la de­fi­ni­zio­ne delle tabelle e la loro struttura, l’in­se­ri­men­to, la modifica e l’eli­mi­na­zio­ne di dati nonché l’ese­cu­zio­ne di query.

Per definire l’ambito di ap­pli­ca­zio­ne dei comandi SQL sono di­spo­ni­bi­li vari standard ISO o ANSI. In più, esiste una serie di dialetti relativi a im­ple­men­ta­zio­ni spe­ci­fi­che. Ad esempio, le im­ple­men­ta­zio­ni dei prin­ci­pa­li pro­dut­to­ri come Post­gre­SQL, MySQL, Oracle DBMS e Microsoft SQL Server sono dotate di varianti lin­gui­sti­che proprie. Alcuni hanno comandi per­so­na­liz­za­ti; la maggior parte dif­fe­ri­sce almeno in termini di funzioni per l’ela­bo­ra­zio­ne di stringhe e altri dati.

Di fatto, SQL comprende diversi sot­to­lin­guag­gi, ognuno dei quali copre aree diverse e prevede dei propri comandi. Esa­mi­nia­mo le tipologie più im­por­tan­ti di comandi SQL.

Quali tipologie di comandi SQL esistono?

I comandi SQL più im­por­tan­ti sono sud­di­vi­si­bi­li in cinque sot­to­lin­guag­gi. Os­ser­via­mo i campi d’ap­pli­ca­zio­ne dei singoli sot­to­lin­guag­gi e dei loro comandi:

Sot­to­lin­guag­gio SQL Comandi Esempi
Data De­fi­ni­tion Language (DDL) Comandi per la de­fi­ni­zio­ne dello schema di database: rea­liz­za­re, mo­di­fi­ca­re ed eliminare tabelle del database; de­fi­ni­zio­ne di chiavi primarie, chiavi esterne e con­straint. CREATE TABLE, DROP TABLE
Data Ma­ni­pu­la­tion Language (DML) Comandi per la ma­ni­po­la­zio­ne di dati: mo­di­fi­ca­re, ag­giun­ge­re ed eliminare set di dati. INSERT, UPDATE
Data Query Language (DQL) Comandi per l’in­ter­ro­ga­zio­ne e la pre­pa­ra­zio­ne di dati. SELECT
Data Control Language (DCL) Comandi per la gestione dei permessi. GRANT, REVOKE
Tran­sac­tion Control Language (TCL) Comandi per il controllo delle tran­sa­zio­ni. COMMIT, ROLLBACK

Qual è la sintassi alla base dei comandi SQL?

Di­ver­sa­men­te dai linguaggi di pro­gram­ma­zio­ne più diffusi, SQL è un lin­guag­gio di­chia­ra­ti­vo. Ciò significa che descrive qual è il risultato da ottenere senza spe­ci­fi­ca­re quali sono i passaggi necessari per rag­giun­ger­lo. Questa pe­cu­lia­ri­tà del lin­guag­gio si esprime in comandi ten­den­zial­men­te più lunghi; in compenso occorre una quantità minore di righe di codice rispetto ai linguaggi im­pe­ra­ti­vi consueti.

Prendiamo ad esempio il comando SQL DROP TABLE IF EXISTS. Avete letto bene, si tratta di un comando singolo che serve a eliminare una tabella, se esistente:

DROP TABLE IF EXISTS SomeTable;

Un esempio di codice Python con una fun­zio­na­li­tà simile comprende più richieste di funzioni e una ra­mi­fi­ca­zio­ne che si estende su due righe:

if db.has_table(some_table):
    db.drop_table(some_table)

Come avete visto, un singolo comando SQL può essere co­sti­tui­to da più parole chiave. Ciò porta i comandi ad as­so­mi­gliar­si tra loro. Uti­liz­zan­do un esempio: a un primo sguardo i due comandi SQL CREATE TABLE e CREATE OR REPLACE VIEW sembrano espres­sio­ne di un comando CREATE alla base. Tuttavia non è così. No­no­stan­te la so­mi­glian­za, infatti, si tratta di due comandi distinti.

Come noto già per altri linguaggi, alcuni comandi SQL accettano parametri, tra cui spesso i nomi di database, tabelle e colonne. A titolo di esempio, in­ter­ro­ghia­mo le colonne ‘Name’ e ‘Age’ della tabella ‘People’:

SELECT Name, Age FROM People;
N.B.

I comandi SQL come SELECT e CREATE TABLE in genere si scrivono tutti in maiuscolo. Infatti, SQL non fa di­stin­zio­ne tra caratteri maiuscoli e minuscoli. Non è altro che una con­ven­zio­ne lar­ga­men­te diffusa.

Per la pre­ci­sio­ne, i comandi SQL sono ordini, oltre ai quali esistono altri costrutti della sintassi che in parte agiscono come comandi. Nella seguente tabella vi spie­ghia­mo gli elementi della sintassi SQL:

Termine Cor­ri­spon­den­te inglese Spie­ga­zio­ne Esempio
Istru­zio­ne Statement Ordina al DBMS di eseguire un’azione; termina con un punto e virgola CREATE TABLE People;
Clausola Clause Modifica un’istru­zio­ne; può comparire solamente all’interno di istru­zio­ni WHERE, HAVING
Espres­sio­ne Ex­pres­sion Emette un valore durante la va­lu­ta­zio­ne 6 * 7
Iden­ti­fi­ca­to­re Iden­ti­fier Nome di un oggetto del database, di una variabile o di una procedura; può essere qua­li­fi­ca­to o meno dbname.tablename / tablename
Predicato Predicate Espres­sio­ne che valuta TRUE, FALSE o UNKNOWN Age < 42
Richiesta Query Istru­zio­ne speciale; emette un insieme di risultati di record SELECT Name FROM People WHERE Age < 42;
Funzione Function Elabora uno o più valori; di norma crea un nuovo valore UPPER('text') -- Re­sti­tui­sce 'TEXT'
Commento Comment Serve a com­men­ta­re il codice SQL; viene ignorato dal RDBMS -- Commento fino alla fine della riga / /* Eventuale commento di più righe */

I comandi SQL più im­por­tan­ti

I database strut­tu­ra­no i dati secondo una gerarchia di livelli di me­mo­riz­za­zio­ni, a partire dai server di database scendendo fino al valore salvato in un campo. Dal momento che tutti gli aspetti di un sistema di gestione di database re­la­zio­na­le (RDBMS) possono essere con­trol­la­ti mediante SQL, esistono comandi SQL per ciascuno dei livelli. Di seguito un riepilogo della gerarchia degli oggetti RDBMS:

Oggetto RDBMS Contiene
Server Database
Database Tabelle
Tabelle Record
Record Campi
Campo Valore tipizzato

Accanto agli oggetti RDBMS primari pre­sen­ta­ti vengono uti­liz­za­ti altri oggetti, come le viste (“views”) e le procedure me­mo­riz­za­te (“stored pro­ce­du­res”). Anche queste sono dotate di comandi SQL propri. Vediamo di seguito i comandi dei cinque prin­ci­pa­li sot­to­lin­guag­gi di SQL:

  1. Data De­fi­ni­tion Language (DDL): lin­guag­gio di de­fi­ni­zio­ne dei dati
  2. Data Ma­ni­pu­la­tion Language (DML): lin­guag­gio di ma­ni­po­la­zio­ne dei dati
  3. Data Query Language (DQL): lin­guag­gio di in­ter­ro­ga­zio­ne dei dati
  4. Data Control Language (DCL): lin­guag­gio di controllo dei dati
  5. Tran­sac­tion Control Language (TCL): lin­guag­gio di controllo di tran­sa­zio­ne

Comandi SQL per la de­fi­ni­zio­ne di dati

Questi comandi SQL si usano per definire strutture di dati. Di con­se­guen­za, operano tutti su oggetti aggregati come database, tabelle e indici. Gli oggetti aggregati con­sen­to­no di me­mo­riz­za­re più record; ogni record può contenere più campi, ciascuno dei quali è assegnato a una colonna. Questa colonna definisce il tipo di dati del campo, ovvero numero, stringa, valore booleano, ecc. In più, per ogni colonna si possono definire re­stri­zio­ni quali “deve essere unica”, “non può essere zero”, ecc.

Comandi SQL per la de­fi­ni­zio­ne di database

Al livello più alto di un sistema di gestione di database re­la­zio­na­li (RDBMS) si collocano i database. È possibile crearli e can­cel­lar­li con un comando SQL:

Comando SQL Spie­ga­zio­ne Esempio
CREATE DATABASE Crea un nuovo database CREATE DATABASE Store;
DROP DATABASE Elimina un database del tutto DROP DATABASE Store;
USE Sceglie il database per i comandi a seguire USE Store;

Comandi SQL per la de­fi­ni­zio­ne di tabelle

La con­fi­gu­ra­zio­ne di un database parte dalla de­fi­ni­zio­ne dello schema del database. Lo schema co­sti­tui­sce la base per l’uso ef­fi­cien­te del database, pertanto pre­sup­po­ne un’accurata pro­get­ta­zio­ne che mappi le singole tabelle e le ri­spet­ti­ve relazioni re­ci­pro­che. Di solito, lo schema del database si sviluppa sulla base di diagrammi di Entity Relation (ER) o di par­ti­co­la­ri diagrammi UML.

Qualora lo schema del database sia presente sotto forma di de­scri­zio­ne astratta, la struttura del database verrà creata uti­liz­zan­do i relativi comandi SQL. A questo punto vengono definite le tabelle con le colonne e le ri­spet­ti­ve tipologie; tutti gli eventuali col­le­ga­men­ti tra le tabelle saranno rea­liz­za­ti tramite “foreign keys” (o chiavi esterne). Suc­ces­si­va­men­te, la struttura può essere mo­di­fi­ca­ta con l’ese­cu­zio­ne di altri comandi SQL. Ri­por­tia­mo ora un riepilogo dei comandi più im­por­tan­ti:

Comando SQL Spie­ga­zio­ne Esempio
CREATE TABLE Crea una nuova tabella nel database; accanto al nome della tabella vengono definiti i nomi delle colonne insieme alle ri­spet­ti­ve tipologie CREATE TABLE Customers ( Cu­sto­me­rID INT UNSIGNED NOT NULL AUTO_INCREMENT, Cu­sto­mer­Na­me VARCHAR(255) NOT NULL, Country VARCHAR(60) NOT NULL, PRIMARY KEY (Cu­sto­me­rID) );
ALTER TABLE Modifica la tabella esistente: aggiunge/rimuove colonne; so­sti­tui­sce il tipo o il nome di una colonna ALTER TABLE Customers ADD Email VARCHAR(50);
TRUNCATE TABLE Elimina tutte le voci di una tabella man­te­nen­do­ne la struttura TRUNCATE TABLE Customers;
DROP TABLE Elimina de­fi­ni­ti­va­men­te la tabella; se la tabella non esiste, genera un errore durante l’ese­cu­zio­ne DROP TABLE Customers;
DROP TABLE IF EXISTS Elimina la tabella se esiste DROP TABLE IF EXISTS Customers;
ALTER COLUMN Modifica il tipo di dati di una colonna esistente ALTER TABLE Customers ALTER COLUMN Email VARCHAR(255);
DROP COLUMN Elimina de­fi­ni­ti­va­men­te una colonna di una tabella ALTER TABLE customers DROP COLUMN Email;
CREATE INDEX Crea un indice con nome per la/e colonna/e di una tabella esistente CREATE INDEX IdxEmail ON Customers (Email);
DROP INDEX Rimuove l’indice esistente ALTER TABLE Customers DROP INDEX IdxEmail;

Una ca­rat­te­ri­sti­ca fon­da­men­ta­le di un sistema di gestione di database (DBMS) è quella di garantire la con­si­sten­za dei dati. Ad esempio, per le singole colonne è possibile spe­ci­fi­ca­re che i campi in esse contenuti non possono essere vuoti o che i valori in esse contenuti devono rientrare nei limiti con­sen­ti­ti. Si parla in questo caso di con­straint (vincoli). Le chiavi esterne, inoltre, possono essere uti­liz­za­te per garantire che i col­le­ga­men­ti tra le tabelle vengano eseguiti in maniera corretta.

Per impostare le re­stri­zio­ni per le singole colonne, si ricorre a una serie di clausole all’interno delle di­chia­ra­zio­ni di de­fi­ni­zio­ne dei dati. Li mostriamo qui senza esempi:

Comando SQL Spie­ga­zio­ne
NOT NULL Definisce che il valore del campo non può essere NULL
UNIQUE Definisce che il valore del campo all’interno della colonna non può comparire più di una volta
DEFAULT Imposta un valore pre­de­fi­ni­to per il campo; se non viene spe­ci­fi­ca­to alcun valore per il campo al momento della creazione del record, verrà adottato il valore pre­de­fi­ni­to
CHECK Imposta una con­di­zio­ne che il valore del campo deve sod­di­sfa­re
PRIMARY KEY Specifica che il campo contiene la chiave primaria; implica UNIQUE e NOT NULL
FOREIGN KEY Specifica che il valore del campo deve essere una chiave primaria di un’altra tabella

Comandi SQL per la ma­ni­po­la­zio­ne di dati

In presenza di tabelle di un database già definite, si procede con le ope­ra­zio­ni sui singoli record di dati. I record di dati possono essere inseriti, mo­di­fi­ca­ti ed eliminati mediante opportuni comandi SQL. Si tratta delle ope­ra­zio­ni CRUD di base “Create, Read, Update, Delete” (Crea, Leggi, Modifica ed Elimina), presenti anche nei database NoSQL:

Comando SQL Spie­ga­zio­ne Esempio
INSERT INTO Inserisce un record nella tabella INSERT INTO Customers (Cu­sto­mer­Na­me) VALUES('Tester');
UPDATE Modifica i campi di uno o più record UPDATE Customers SET Email = 'test@example.com' WHERE Cu­sto­mer­Na­me = 'Tester';
DELETE FROM Elimina i record da una tabella DELETE FROM Customers WHERE Cu­sto­mer­Na­me = 'Tester';

Va notato che le clausole o, meglio, le funzioni ‘WHERE’, ‘SET’ e ‘VALUES’ che compaiono negli esempi sono presenti anche in altri contesti. Tuttavia, no­no­stan­te abbiano lo stesso nome, le regole per il loro utilizzo po­treb­be­ro differire leg­ger­men­te. Prestate dunque at­ten­zio­ne durante l’utilizzo dei comandi SQL UPDATE e DELETE FROM senza una clausola WHERE. Ciò implica infatti la modifica o l’eli­mi­na­zio­ne di tutti i record della tabella.

Comandi SQL per l’in­ter­ro­ga­zio­ne di dati

Il comando SQL SELECT è forse il comando più famoso del lin­guag­gio. Serve a ricavare i dati dal database. Ge­ne­ral­men­te, lo stock di dati non subisce modifiche. Il comando SELECT è quindi fre­quen­te­men­te ac­ces­si­bi­le a chi ha il compito di ana­liz­za­re. Esa­mi­nia­mo i com­po­nen­ti di base del comando SQL SELECT:

Comando SQL Spie­ga­zio­ne Esempio
SELECT Interroga i dati del database SELECT Cu­sto­mer­Na­me FROM Customers;
WHERE Limita la query ai record che sod­di­sfa­no un de­ter­mi­na­to predicato SELECT Email FROM Customers WHERE Cu­sto­mer­Na­me = 'Tester';
AS Definisce un alias per una tabella o una riga all’interno di una query SELECT Cu­sto­me­rID AS ID, Cu­sto­mer­Na­me AS Customer FROM Customers;
HAVING Limita la query ai record cor­ri­spon­den­ti con la funzione aggregata SELECT COUNT(Cu­sto­me­rID), Country FROM Customers HAVING COUNT(Cu­sto­me­rID) >= 1;

Sebbene SELECT sia un unico comando SQL per l’in­ter­ro­ga­zio­ne dei dati, può essere impiegato in una varietà di modi. Sono presenti diverse clausole che servono a filtrare, ordinare e sin­te­tiz­za­re i dati forniti. Le ana­liz­zia­mo di seguito.

Comandi SQL per affinare le query

Il comando SQL SELECT fornisce un co­sid­det­to result set (insieme di risultati). Dal punto di vista con­cet­tua­le, un result set può essere con­si­de­ra­to come una tabella con colonne e relativi valori in esse contenuti. Nella pratica, occorre spesso filtrare o ordinare i risultati o limitare il numero di record ottenuti. Per tutti questi casi d’uso, esistono delle clausole cor­ri­spon­den­ti che possono essere uti­liz­za­te all’interno di un comando SELECT SQL:

Comando SQL Spie­ga­zio­ne Esempio
DISTINCT Rimuove i duplicati dall’insieme di risultati SELECT DISTINCT Country FROM Customers;
LIMIT Limita il result set ai risultati più im­por­tan­ti SELECT * FROM Customers LIMIT 5;
GROUP BY Raggruppa il result set in base a una ca­rat­te­ri­sti­ca comune SELECT Cu­sto­mer­Na­me, Country FROM Customers GROUP BY Country;
ORDER BY Clas­si­fi­ca il result set in base a una ca­rat­te­ri­sti­ca SELECT Cu­sto­mer­Na­me, Email FROM Customers SORT BY Cu­sto­mer­Na­me;
ASC Utilizza l’ordine crescente (“ascending”) SELECT DISTINCT Country FROM Customers SORT BY Country ASC;
DESC Utilizza l’ordine de­cre­scen­te (“de­scen­ding”) SELECT DISTINCT Country FROM Customers SORT BY Country DESC;

Comandi SQL per il col­le­ga­men­to delle query

Oltre ad affinare l’insieme di risultati, è possibile collegare le query tra più tabelle. Tenete presente che un comando SQL SELECT re­sti­tui­sce un insieme di risultati. Di con­se­guen­za, SQL contiene comandi tali da con­sen­ti­re l’unione di due result set secondo le regole della teoria degli insiemi re­la­zio­na­li.

Per poter spiegare in dettaglio i comandi SQL per il col­le­ga­men­to delle query sarebbero necessari esempi complessi con diverse tabelle definite. Pertanto, in questa sede faremo a meno di uti­liz­za­re un codice di esempio. Passiamo in rassegna le ope­ra­zio­ni degli insiemi più im­por­tan­ti:

Comando SQL Spie­ga­zio­ne
UNION Unisce due insiemi di risultati; i result set devono avere colonne dello stesso tipo nello stesso ordine. Le loro righe vengono unite.
INNER JOIN Filtra due insiemi di risultati in base a un criterio comune.
LEFT JOIN Unisce l’insieme di risultati della query di sinistra con i risultati cor­ri­spon­den­ti della query di destra; i campi non cor­ri­spon­den­ti vengono impostati su NULL.
RIGHT JOIN Unisce l’insieme di risultati della query di destra con i risultati cor­ri­spon­den­ti della query di sinistra; i campi non cor­ri­spon­den­ti vengono impostati su NULL.
FULL OUTER JOIN Com­bi­na­zio­ne di un LEFT JOIN e un RIGHT JOIN.

Comandi SQL per la me­mo­riz­za­zio­ne e la ri­pe­ti­zio­ne delle query

Come si è visto, le query SQL possono essere piuttosto complesse. Nella pratica, in genere conviene eseguire le query più volte. In linea di principio, è possibile me­mo­riz­za­re i comandi SQL cor­ri­spon­den­ti come codice e im­por­tar­li quando ne­ces­sa­rio. Si tratta tuttavia di una soluzione poco ef­fi­cien­te. Per fortuna, esistono speciali comandi SQL che con­sen­to­no di salvare query complesse come unità di­ret­ta­men­te nel sistema di gestione dei database (DBMS).

Con­si­de­ria­mo prima di tutto le viste, chiamate “views” in inglese. Una vista del database cor­ri­spon­de all’incirca a una query me­mo­riz­za­ta. Non di­men­ti­chia­mo che una query re­sti­tui­sce come risultato un insieme di tabelle. Anziché scartarlo, lo salveremo come vista. Le viste sono anche note come “tabelle virtuali”. Di regola, una vista può essere solo letta. Ci sono diversi comandi SQL per lavorare con le viste:

Comando SQL Spie­ga­zio­ne Esempio
CREATE VIEW Crea una nuova vista CREATE VIEW Ita­lian­Cu­sto­mers AS SELECT Cu­sto­mer­Na­me, Email FROM Customers WHERE Country = "IT";
ALTER VIEW Modifica una vista esistente ALTER VIEW Ita­lian­Cu­sto­mers AS SELECT * FROM Customers WHERE Country = "IT";
CREATE OR REPLACE VIEW Crea una nuova vista o ne so­sti­tui­sce una esistente, se ne­ces­sa­rio CREATE OR REPLACE VIEW Ita­lian­Cu­sto­mers AS SELECT * FROM Customers WHERE Country = "IT";
SHOW CREATE VIEW Mostra il comando SQL uti­liz­za­to per creare una vista SHOW CREATE VIEW Ita­lian­Cu­sto­mers;
DROP VIEW Elimina una vista esistente DROP VIEW Ita­lian­Cu­sto­mers;

Insieme alle viste del database, esistono anche le procedure me­mo­riz­za­te (“stored pro­ce­du­res”). Le procedure me­mo­riz­za­te sono uti­liz­za­te per eseguire ri­pe­tu­ta­men­te le query e sono più complesse delle viste. Sono in grado di accettare parametri e ser­vir­se­ne per comporre le query in modo dinamico. In più, per mezzo di una procedura me­mo­riz­za­ta è possibile accedere in scrittura ai dati sot­to­stan­ti. Per motivi di spazio, forniamo un riepilogo dei comandi SQL per­ti­nen­ti, senza esempi:

Comando SQL Spie­ga­zio­ne
CREATE PROCEDURE Crea una nuova procedura
ALTER PROCEDURE Modifica una procedura esistente
CREATE OR REPLACE PROCEDURE Crea una nuova procedura o even­tual­men­te so­sti­tui­sce una esistente
DROP PROCEDURE Elimina una procedura esistente
CALL Esegue una procedura me­mo­riz­za­ta

L’uso di procedure me­mo­riz­za­te tra­sfe­ri­sce il codice dal client al server. La se­pa­ra­zio­ne delle com­pe­ten­ze ottenuta in questo modo porta a una maggiore sicurezza e a migliori pre­sta­zio­ni. Lo svan­tag­gio può essere che la logica di business contenuta in una procedura me­mo­riz­za­ta è al di fuori del sistema di controllo della versione. Dal momento che le procedure me­mo­riz­za­te dipendono stret­ta­men­te dal DBMS cir­co­stan­te, un cambio di provider, nel peggiore dei casi, porta a una perdita di fun­zio­na­li­tà.

N.B.

Le procedure me­mo­riz­za­te non sono da con­fon­de­re con i prepared statement (in italiano: “di­chia­ra­zio­ni preparate”). Ambedue i mec­ca­ni­smi con­tri­bui­sco­no a mi­glio­ra­re la sicurezza. I prepared statement, tuttavia, sono definiti lato client, quindi da parte dell’ap­pli­ca­zio­ne.

Comandi SQL per il controllo degli accessi

Un singolo server di database può com­pren­de­re più database. Per riuscire a gestirli in modo in­di­pen­den­te l’uno dall’altro, si ricorre a mec­ca­ni­smi di controllo degli accessi. Ad esempio, per i singoli utenti è possibile definire i permessi con cui accedere ai database e alle tabelle in essi contenute. Si possono inoltre definire gruppi di utenti e assegnare loro utenti. A tali scopi sono uti­liz­za­ti due comandi SQL prin­ci­pa­li:

Comando SQL Spie­ga­zio­ne Esempio
GRANT Assegna permessi GRANT ALL ON SomeDB.* TO 'sara'@'lo­ca­lho­st';
REVOKE Revoca permessi REVOKE INSERT ON *.* FROM 'sara'@'lo­ca­lho­st';

Comandi SQL per il controllo delle tran­sa­zio­ni

Tra i vantaggi dell’utilizzo di sistemi di gestione di database re­la­zio­na­li (RDBMS) vi è la garanzia di proprietà “ACID”. In sintesi, ciò assicura che i dati siano sempre in uno stato pulito e ben definito. A livello tecnico, si usano le co­sid­det­te tran­sa­zio­ni, in­scin­di­bi­li in quanto atomic operation (ope­ra­zio­ni atomiche). Una tran­sa­zio­ne viene com­ple­ta­ta in­te­ra­men­te e senza errori, al­tri­men­ti significa che si è ve­ri­fi­ca­to un errore. In tal caso, quindi, verranno annullati i singoli passaggi. Diamo un’occhiata ai comandi SQL per il controllo delle tran­sa­zio­ni:

Comando SQL Spie­ga­zio­ne Esempio
START TRAN­SAC­TION Segnala l’inizio di una tran­sa­zio­ne START TRAN­SAC­TION;
COMMIT Completa con successo una tran­sa­zio­ne avviata START TRAN­SAC­TION; TRUNCATE TABLE Customers; COMMIT;
ROLLBACK Annulla una tran­sa­zio­ne avviata e riporta lo stock di dati allo stato iniziale START TRAN­SAC­TION; TRUNCATE TABLE Customers; ROLLBACK;
SAVEPOINT Crea un punto di sal­va­tag­gio con nome all’interno di una tran­sa­zio­ne START TRAN­SAC­TION; SAVEPOINT Be­fo­reAdd­Da­ta;
ROLLBACK TO Torna indietro a un punto di sal­va­tag­gio de­no­mi­na­to ROLLBACK TO Be­fo­reAdd­Da­ta;

Un riepilogo delle proprietà ACID men­zio­na­te:

Proprietà ACID Cor­ri­spon­den­te in italiano Spie­ga­zio­ne
Atomicity Atomicità Le tran­sa­zio­ni sono in­scin­di­bi­li. Esse vengono eseguite com­ple­ta­men­te o non vengono eseguite affatto. Se una tran­sa­zio­ne atomica viene annullata, il sistema si ritroverà allo stato pre­ce­den­te all’inizio della tran­sa­zio­ne.
Con­si­sten­cy Con­si­sten­za Dopo l’ese­cu­zio­ne di una tran­sa­zio­ne, lo stock di dati si trova di nuovo in una forma con­si­sten­te.
Isolation Iso­la­men­to Le ope­ra­zio­ni eseguite in con­tem­po­ra­nea non devono in­fluen­zar­si a vicenda.
Du­ra­bi­li­ty Du­ra­bi­li­tà Gli effetti di una tran­sa­zio­ne devono rimanere in modo per­ma­nen­te nello stock di dati. Gli effetti di una tran­sa­zio­ne andata a buon fine non devono andare persi se, ad esempio, l’RDBMS si blocca.
Consiglio

Fissate la Digital Guide alla barra delle ap­pli­ca­zio­ni di Windows. In questo modo i nostri articoli saranno sempre a portata di mouse e pronti per essere con­sul­ta­ti. Qui vi spie­ghia­mo come fare:

Vai al menu prin­ci­pa­le