SQL - Comandi da CLI

DBMS Relazionali

I RDBMS (Relational Database Management Systems) sono sistemi per memorizzare e gestire le basi di dati relazionali, che sono organizzate in tabelle e relazioni tra tabelle (le chiavi tengono traccia delle relazioni). Utilizzano il linguaggio SQL per la gestione delle basi di dati e per gestire i dati che queste contengono.

Il linguaggio SQL lo si può dividere in:

  • DDL (Data Definition Language): definisce i comandi SQL che gestiscono la struttura delle basi di dati (i database, composti da tabelle, indici, viste, schemi, …).
  • DML (Data Manipulation Language): definisce i comandi SQL per gestire i dati memorizzati nelle basi di dati (nei database).

Tra i RDBMS più comuni abbiamo:

  • Oracle Database e Microsoft SQL Server, rispettivamente di Oracle srl e di Microsoft srl, sono RDBMS enterprise con funzioni avanzate per sicurezza, scalabilità e gestione di grandi carichi di lavoro.
  • PostgreSQL, MySQL e MariaDB: RDBMS relazionali open source avanzati, veloci e semplici da usare, ampiamente utilizzati in applicazioni web e hosting.
  • SQLite: un RDBMS particolare, leggero, non prevede un server (serverless) ed ogni base di dati è memorizzata in un file; E’ il DBMS ideale per applicazioni locali e per mobile.

Creazione database

In sqlite la creazione e cancellazione di un database corrisponde alla creazione e cancellazione di un file.

Il database va creato con tramite terminale con il comando:

sqlite3 /percorso/al/file.db

Con questo comando, si entra anche nella shell di SQLite, si può uscire scrivendo .exit:

SQLite version 3.x.x
Enter ".help" for usage hints.
sqlite>

Cancellando il file nome_db.sqlite, si cancella anche il database.

Comandi con SQLite

I comandi si possono invocare in due modalità:

  • eseguendoli direttamente dalla linea di comando:
sqlite3 nome_db.sqlite .schema
  • entrando nella shell e poi eseguendo i comandi:
sqlite3 nome_db.sqlite

Entrati nella shell, si eseguono i comandi:

SQLite version 3.x.x
Enter ".help" for usage hints.
sqlite> .schema

Gestione tabelle

Comando per creare una tabella:

CREATE TABLE tabella (
  id INTEGER PRIMARY KEY,
  numInt integer INTEGER,
  numReal real REAL,
  campi_binari BLOB, -- campo binario
  numero NUMERIC,
  testo TEXT,
  date_time TEXT   -- campo TEXT anche per date, formato 'YYYY-MM-DD HH:MM:SS'
) STRICT;

L’istruzione STRICT indica che si vuole una validazione stringente dei tipi e dei dati inseriti.

Cancellare una tabella:

DROP TABLE nome_tabella;

Rinominare una tabella:

ALTER TABLE nome_tabella RENAME TO nuovo_nome_tabella;

Aggiungere una colonna ad una tabella:

ALTER TABLE tipi_unici_sqlite ADD COLUMN nuova_text TEXT;

La cancellazione di una colonna di una tabella non è supportata.

Operazioni sui dati

Le operazioni sui dati sono dette CRUD: Create (insert), Read, Update e Delete.

INSERT INTO tabella (colonna1, colonna2)
VALUES (valore1, valore2);

SQLite non supporta la sintassi INSERT INTO tabella SET colonna1=valore1;.

SELECT * FROM tabella WHERE condizione;
UPDATE tabella SET colonna1 = valore1 WHERE condizione;
DELETE FROM tabella; -- cancella tutti i dati
DELETE FROM tabella WHERE condizione; -- cancella in base alla condizione

Operazioni sui vincoli

SQLite non supporta la modifica dei vincoli su una tabella. Queste istruzioni non sono valide:

ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY (col);
ALTER TABLE table_name DROP CONSTRAINT pk_name;
ALTER TABLE table_name ADD CONSTRAINT uq_name UNIQUE (col);
ALTER TABLE table_name DROP CONSTRAINT uq_name;

Le operazioni vanno fatte direttamente nell’istruzione di create table.

CREATE TABLE tabella (
  ...
  CONSTRAINT pk_esempio PRIMARY KEY (col_a, col_b),
  CONSTRAINT uq_esempio UNIQUE (col_1, col_2),
  CONSTRAINT chk_esempio CHECK (col_b >= col_a)
) STRICT;

CTE

WITH nome_query AS (
  SELECT ...
  FROM ...
)
SELECT *
FROM nome_query
WHERE condizione;