Data Definition Language
DDL è l'acronimo inglese di Data Definition Language, ovvero un linguaggio che permette di creare, modificare o eliminare gli oggetti in un database. Il linguaggio DDL compone una parte del linguaggio SQL. Sono i comandi DDL a definire la struttura del database e quindi dei dati ivi contenuti. Ma non fornisce gli strumenti per modificare i dati stessi: per tale scopo di usa il DML. L'utente deve avere i permessi necessari per agire sulla struttura del database e questi permessi vengono assegnati tramite il DCL.
Create ___domain
Oltre ai tipi come integer, char, float, ... possiamo crearne altri: la creazione è simile ad una ridenominazione di un tipo fondamentale visto tra quelli sopra o di un tipo creato ex-novo, ereditandone tutte le caratteristiche.
Sintassi del comando create ___domain
create ___domain NomeDominio as Tipo [ ValoreImpostato ] [ Vincolo ] { DefSchema }
Si crea un tipo di nome " NomeDominio " partendo da un precedente " Tipo ", impostando un opzionale valore di default ed un insieme di vincoli. Questa operazione permette di definire una ed una sola volta tutte le caratteristiche (vincoli) che possono essere associati ad un attributo, quando questo è utilizzato in più tabelle, evitando così ridondanze.
Create schema
Lo schema è una collezione di tutti gli oggetti che faranno parte della base di dati, cioè domini, tabelle, viste, privilegi, asserzioni.E' un po' come la parte dichiarativa di un programma scritto con un linguaggio imperativo: prima creiamo i tipi, le funzioni e le procedure, poi le utilizziamo nel corpo.
Sintatti del comando create schema
create schema [ NomeSchema ] [ [ autorization ] Autorizzazione ] { DefElementoSchema }
Autorizzazione è il nome dell' utente propietario dello schema;se mancante si assume che sia l'utente che ha lanciato il comando.Il NomeSchema può essere omesso: in tal caso il nome sarà quello dell'utente propietario.Per ogni utente ci sono delle Autorizzazioni cioè possiamo imporre certi limiti a chi interroga la nostra Base di dati.
Create database
Il comando create database serve a creare un nuovo database, che potrà contenere tabelle, viste, stored procedure, trigger o altri tipi di oggetti.
Sintassi del comando create database
La sintassi è la seguente:
CREATE DATABASE nome_database
Alter database
Il comando alter database serve a modificare un database esistente.
Sintassi del comando alter database
La sintassi è la seguente:
ALTER {DATABASE | SCHEMA} [db_name] COLLATE collation_name
Drop database
Il comando drop database serve a cancellare un database.
Sintassi del comando drop database
La sintassi è la seguente:
DROP DATABASE nome_database
Create table
Il comando create table ha la funzione di creare una nuova tabella (o tavola).
Il nome della tabella può essere scritto indifferentemente in MAIUSCOLO o in minuscolo, in ogni caso, però, è necessario che rispetti le seguenti regole:
- Può essere formato da lettere e numeri, ma il primo carattere deve sempre essere una lettera;
- Non può superare i 30 caratteri di lunghezza;
- Non può avere lo stesso nome di una tabella o vista già esistente sullo stesso utente di database.
Oltre a definire gli attributi di una tabella è possibile definire dei vincoli.
La tabella può essere creata vuota (vedi la create table semplice) oppure può essere creata e riempita di dati (vedi la create table mediante select): nel secondo caso la struttura della tabella è definita implicitamente dal numero di colonne (o campi) estratti dalla select, dal tipo di dato di ciascuna colonna e dai nomi delle rispettive colonne estratte dalla select (o dagli alias ad esse applicati).
Nel caso in cui la tabella venga popolata in fase di creazione, la transazione viene automaticamente conclusa da un comando di COMMIT.
Vincoli
I vincoli sono di vari tipi.
- Intrarelazionali: Sono vincoli che interessano una sola tabella (relazione nel modello E.R. da cui il nome) e quindi hanno senso solo sugli attributi dove definiti. In questa categoria abbiamo Primary key che può essere specificato una sola volta per tabella;con esso si dichiarano uno o più attributi come chiave primaria.Una chiave primaria serve a rendere univoche le righe della tabella ove essa è definita: due righe distinte non potranno avere lo stesso valore sui campi scelti come Primary key. Vincolo Not null che viene usato quando si dichiara un attributo il cui valore nullo non può essere accettato. Se si definisce un valore di default, si può non immettere nulla in quanto non verrà inserito Null bensì il valore preinpostato. Tale valore viene assegnato facendolo seguire alla definizione di un attributo.Vincolo Unique che implementa una caratteristica simile al Primary Key, con la particolarità che un attributo dichiarato Unique può assumere il valore nullo. Si può definire il vincolo in due modi: su di un singolo attributo oppure su una raccolta di atrributi delimitati da parentesi tonde.
- Interrelazionali: Sono vincoli che definiscono i legami tra due o più tabelle.Il vincolo interrelazionale più utilizzato è sicuramente quello di integrità referenziale, cioè attributi che possono assumere soltanto dei valori specificati in un'altra tabella. SQL permette di utilizzare questa regola tramite un apposito costrutto, foreign key (chiave esterna): si crea un collegamento tra gli attributi della tabella che state creando con un insieme di attributi di una tabella già esistente.Chiameremo slave la tabella da creare, master l'altra. L'unica imposizione che deve essere rispettata è che nella tabella master gli attribuiti a cui si riferisce siano dichiarati come unique; generalmente essi sono delle chiavi primarie quindi l'unicità è assicurata.Se dovessimo utilizzare il legame tra un solo attributo della tabella slave con un solo attributo della tabella master si utilizza il costrutto references.Ogni qual volta si utilizza la foreign key bisogna sempre specificare a quale attributo ci stiamo riferendo, facendo seguire alla chaive esterna il comando references.
SQL inoltre mette a disposizione delle tecniche quando si violano i vincoli di integrità interrelazionali.I casi sono cancellazione o aggiornamento: Cancellazione:
on delete
cascade: tutte le righe della slave verranno cancellate. set null: al posto del valore dell'attributo chiave viene posto il valore NULL. set default: viene caricato il valore di default precedentemente definito (strategia ottimale). no action: reazione passiva, cioè non viene fatto nulla. Per simmetria anche nel caso di aggiornamento di attributi nella master si hanno le seguenti ripercussioni sulla/e slave
on upgrade
cascade: il nuovo valore della master viene copiato nella/e slave. set null: il valore associato alla chiave viene sostituito con NULL. set default: associa il valore di base. no action: non modificare i dati nella tabella. Sintatticamente devono seguire la definizione di foreign key. Le operazioni sono combinabili tra loro, nel senso che è possibile decidere al momento della definizione della tabella le strategie da utilizzare in caso di modifica delle chiavi esterne.
Sintassi del comando create table
- Create table semplice:
CREATE TABLE nome_tabella(
nome_colonna1 tipo di dato constraint (opzionale), nome_colonna2 tipo di dato constraint (opzionale), nome_colonna3 tipo di dato constraint (opzionale), ... nome_colonnaN tipo di dato constraint (opzionale) );
- Create table mediante select:
CREATE TABLE nome_tabella
AS
SELECT ...;
Alter table
Il comando alter table ha la funzione di modificare la struttura della tabella.
L'operatore ADD consente di inserire una nuova colonna su una tabella esistente oppure di aggiungere delle constraint alle colonne della tabella.
L'operatore MODIFY consente di cambiare il tipo di dato e/o la constraint propri di ogni colonna di una tabella.
L'operatore DROP consente di eliminare la constraint dalla colonna.
Sintassi del comando alter table
Operatore add
- Inserimento di una nuova colonna:
ALTER TABLE nome_tabella
ADD nome_colonna_nuova tipo di dato constraint;
- Aggiunta di una chiave primaria (primary key):
ALTER TABLE nome_tabella
ADD CONSTRAINT nome_tabella_pk PRIMARY KEY (nome_colonna che funge da chiave primaria);
- Aggiunta di una chiave esterna (foreign key) ereditata da un'altra tabella:
ALTER TABLE nome_tabella_figlia
ADD CONSTRAINT nome_tabella_figlia_fk FOREIGN KEY (nome_colonna che funge da chiave esterna sulla tabella figlia) REFERENCES nome_tabella_padre (nome_colonna che funge da chiave primaria sulla tabella padre);
Operatore modify
- Modifica del tipo di dato di una colonna:
ALTER TABLE nome_tabella
MODIFY nome_colonna tipo di dato nuovo;
- Modifica della constraint di una colonna:
ALTER TABLE nome_tabella
MODIFY nome_colonna constraint nuova;
Operatore drop
- Eliminazione della chiave primaria:
ALTER TABLE nome_tabella
DROP PRIMARY KEY;
- Eliminazione della chiave esterna:
ALTER TABLE nome_tabella_figlia
DROP CONSTRAINT nome_tabella_figlia_fk;
Drop table
Il comando drop table consente di distruggere una tabella, eliminandola fisicamente dal database.
Come tutti i comandi DDL è un'operazione irreversibile, e provoca la perdita di tutti i dati contenuti nella tabellla.
Sintassi del comando alter table
DROP TABLE nome_tabella;
Rename
Il comando rename consente di rinominare una tabella.
Sintassi del comando rename
RENAME nome_tabella TO nuovo_nome_tabella;