SQL è il nostro tutto

Come probabilmente hai già intuito, tutti i comandi al server SQL possono essere dati tramite query SQL. Qualunque cosa.

Queste squadre sono ufficialmente divise in 4 gruppi:

  • dichiarazioni di definizione dei dati (Data Definition Language, DDL ):

    • CREATE crea un oggetto database (database stesso, tabella, vista, utente e così via)
    • ALTER modifica un oggetto
    • DROP rimuove un oggetto
  • operatori di manipolazione dei dati (Data Manipulation Language, DML ):

    • SELECT seleziona i dati che soddisfano determinate condizioni
    • INSERT aggiunge nuovi dati
    • UPDATE modifica i dati esistenti
    • DELETE rimuove i dati
  • operatori di definizione dell'accesso ai dati (Data Control Language, DCL ):

    • GRANT concede a un utente (gruppo) le autorizzazioni per eseguire determinate operazioni su un oggetto
    • REVOKE revoca le autorizzazioni rilasciate in precedenza
    • DENY stabilisce un divieto che ha la precedenza su un permesso
  • Dichiarazioni TCL ( Transaction Control Language) :

    • COMMIT applica una transazione
    • ROLLBACK esegue il rollback di tutte le modifiche apportate nel contesto della transazione corrente
    • SAVEPOINT divide una transazione in sezioni più piccole

E i primi due livelli, abbiamo studiato solo le varietà dell'istruzione SELECT. Immagina quante cose interessanti ci aspettano in futuro.

Ma ci stiamo preparando qui principalmente sui programmatori Java, quindi studieremo quegli scenari che incontrerai sicuramente al lavoro.

Molto probabilmente l'amministratore di sistema del progetto creerà tutti i database, ma dovrai sicuramente effettuare tu stesso una selezione dai dati molte volte.

Inoltre, a volte il tuo codice non scriverà tutti i dati nel database o li scriverà in modo sbagliato, quindi spesso dovrai arrampicarti dentro con le penne e vedere cosa è effettivamente memorizzato lì.

Ripercorriamo di nuovo le cose che abbiamo toccato nelle lezioni precedenti.

Creazione di uno schema in un database

Per creare un nuovo schema nel DBMS, è necessario eseguire il comando:

CREATE SCHEMA Name;

Questa è l'opzione più semplice. Inoltre, quando si crea un nuovo schema, è possibile specificare il formato di codifica dei dati e altri parametri.

Se vuoi eliminare lo schema, ma non sei sicuro che esista, devi eseguire il comando:

DROP SCHEMA IF EXIST Name;

Vedrai spesso questi comandi in file con backup di diversi database, ecco perché li porto qui.

Selezione dello schema corrente

Se hai molti schemi nel tuo DBMS, può facilmente accadere che schemi diversi abbiano le stesse tabelle. Per evitare confusione, puoi fare due cose:

  • Inserisci sempre il nome dello schema prima del nome della tabella
  • Specifica lo schema predefinito

Scriviamo una query che selezionerà i dati dalla tabella utente , che si trova nello schema di test . Sarà simile a questo:

SELECT * FROM test.user;

Questo è semplicemente indispensabile se è necessario unire (JOIN) più tabelle da diversi schemi in un'unica query.

A proposito, nel linguaggio Java spesso facciamo qualcosa di simile: se nel codice dobbiamo usare classi con lo stesso nome da pacchetti diversi, aggiungiamo il nome del pacchetto prima del nome della classe.

Il secondo modo consiste nello specificare lo schema predefinito . Se la query specifica un nome di tabella ma nessuno schema, viene utilizzato lo schema predefinito. Per fare ciò, utilizzare l'istruzione USE :

USE name - schemes;

Riscriviamo la query precedente utilizzando l'istruzione USE:

USE test;
SELECT * FROM user;

Creazione di una vista

Oltre alle tabelle con dati reali, SQL consente di archiviare qualcosa come tabelle virtuali, in cui i dati vengono estratti da tabelle reali. Tali tabelle virtuali sono chiamate VIEW.

Una tabella di questo tipo non può memorizzare dati reali e ogni volta che vi si accede estrae dati da tabelle reali. Il contenuto di tale VIEW viene specificato utilizzando una query SQL.

Puoi creare una VIEW da qualsiasi query SELECT con un comando come:

CREATE VIEW Name AS
SELECT-request;
Scriviamo una query che creerà una tabella virtuale public_employee basata sulla tabella dei dipendenti, in cui le informazioni sullo stipendio dei dipendenti saranno nascoste:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

Nell'esempio sopra, la nostra tabella (VIEW) public_employee conterrà solo gli ID dei dipendenti e i loro nomi, ma non le informazioni sul loro stipendio. Puoi utilizzare tali viste nello stesso posto delle tabelle reali.

Perché sono necessarie le visualizzazioni? Hanno una serie di vantaggi:

Controllo flessibile dell'accesso alle informazioni . Puoi dare a determinati utenti l'accesso solo a VIEW, ma non dare accesso alle tabelle. E in Visualizza, estrai solo le informazioni pubbliche dalle tabelle. Inoltre, se in futuro verranno aggiunte nuove colonne con informazioni importanti alle tabelle, non entreranno accidentalmente nella vista.

Denormalizzazione dei dati . Per comodità di archiviazione, i dati sono spesso divisi in centinaia e migliaia di tabelle, ma non è molto conveniente per una persona comune lavorare con tali dati: devi scrivere query troppo complesse. Con View, puoi creare tabelle virtuali che visualizzano i dati di dozzine di tabelle diverse in un'unica tabella.

Polimorfismo e incapsulamento . Puoi modificare le strutture del tuo database. Allo stesso tempo, gli utenti del programma che lavorano con le tue visualizzazioni non indovineranno che qualcosa è cambiato. E non sarà necessario riscrivere il codice dei programmi che hanno accesso a View. Dovrai solo modificare lo script SQL correlato a VIEW.

Sola lettura . View può essere impostato solo con una query SELECT, quindi lavorare con View non può modificare in alcun modo i dati nelle tabelle reali. A proposito, questo è un altro vantaggio a favore del caching delle query. Ma ne riparleremo la prossima volta.