Nel caso in cui la tabella venga popolata in fase di creazione, la [[DML#la transazione|transazione]] viene automaticamente conclusa da un comando di [[DML#Commit|COMMIT]].
==== Vincoli d'integrità====
L'implementare i [[Vincoli di integrità]] con l'[[SQL]] esistono delle parole riservate.
I [[Vincoli di integrità]] sono delle proprietà che devono essere soddisfatte dalle istanze che rappreentano informazioni corrette per l'applicazione. Ogni vincolo può essere visto come un predicato che associa ad ogni istanza il valore vero o falso. Se il predicato assume il valore vero diciamo che l'istanza soddifa il vincolo. In generale ad un schema di base di dati associamo un insieme di vincoli e consideramio corrette (o lecite, o ammissibili) le istanze che soddisfano tutti i vincoli.
I vincoli sono di vari tipi.
====='''Vincoli 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.
====='''Vincoli di Tupla'''===== ▼
Un vincolo di tupla è un vincolo che può essere valutato su ciascuna tupla indipendentemente dalle altre: i vincoli relativi ai primi due casi rientrano in questa categoria.
Un vincolo definito con riferimento a singoli valori viene detto vincolo su valori o vincolo di dominio in quanto impone una restrizione sul dominio dell'attributo.
====='''Vincoli 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.
▲===== '''Vincoli Intrarelazionali '''=====
SQL inoltre mette a disposizione delle tecniche quando si violano i vincoli di integrità interrelazionali.I casi sono cancellazione o aggiornamento: <br>
* Not Null: Il vincolo not null inidica che il valore nullo non è ammesso come valore dell'attributo; in tal caso l'attributo deve sempre essere specificato tipicamente in fase di inserimento. Se all'attributo è però associato un valore di default diverso dal valore nullo, allora diventa possibile effettuare l'inserimento anche senza fornire un valore dell'attributo, in quanto all'attributo viene automaticamente assegnato il valore di default.
'''Cancellazione''':
* Unique: Un vincolo unique si applica ad un attributo o un insieme di attributi di una tabella e impone che i valori dell'attributo (o le ennuple di valori sull'insieme di attributi) siano una (super)chiave, cioè righe differenti della tabella non possano comparire su diverse righe senza violare il vincolo in quanto si assume che i valori nulli siano tutti diversi tra loro.
* Primary Key: Nella definizione di una tabella è necessario specificare per ogni relazione la chiave primaria, il più importante tra gli identificatori della relazione. [[SQL]] permette così di specificare il vincolo primary key una sola volta per ogni tabella. Il vincolo primary key può essere definito direttamente su un singolo attributo, oppure essere definito elencando più attributi che costituiscono l'identificatore.
''on delete''
▲===== '''Vincoli di Tupla'''Interrazionali=====
Per la gestione di questo tipo di vincoli si utilizza il foreign key (ovvero chiave esterna).
cascade: tutte le righe della slave verranno cancellate.
Questo vincolo crea un legame tra i valori di un attributo della tabella corrente e i volaro di un attributi di un'altra tabella che in relazione. Il vincolo impone che per ogni riga della tabella il balore dell'attributo specificato se diverso dal valore nullo si a presente delle righe della tabella esterna tra i valori corrispondenti dell'attributo.
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.
'''Aggiornamento''':
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====
|