Datu definēšanas valoda

SQL kontekstā, **datu definēšanas** jeb **datu aprakstīšanas valoda** (**DDL**) ir sintakse datu bāzes objektu, piemēram, tabulu, indeksu un lietotāju izveidei un modificēšanai. DDL vaicājumi ir līdzīgi datorprogrammēšanas valodai, kas definē datu struktūru, īpaši datubāzu shēmu. Visbiežāk lietotie DDL vaicājumu piemēri ir `CREATE`, `ALTER` un `DROP`.

## Vēsture
Datu definīcijas valodas jēdziens un tās nosaukums pirmo reizi tika ieviests saistībā ar Codasyl datu bāzes modeli, kur datu bāzes shēma tika uzrakstīta valodas sintaksē, kas aprakstīja lietotāja datu modeļa ierakstus, laukus un kopas. Vēlāk to izmantoja, lai atsauktos uz strukturētās vaicājumu valodas (SQL) apakškopu, lai deklarētu tabulas, kolonnas, datu tipus un ierobežojumus. SQL-92 ieviesa shēmu manipulēšanas valodu un shēmu informācijas tabulas, lai vaicātu shēmas. Šīs informācijas tabulas SQL:2003 tika norādītas kā SQL/Schemata. Termins DDL tiek lietots arī vispārīgā nozīmē, lai apzīmētu jebkuru formālu valodu, kas apraksta datus vai informācijas struktūras.

## Strukturēto vaicājumu valoda (SQL)
Vairākas datu aprakstīšanas valodas lieto deklaratīvo sintaksi, lai definētu kolonnas un datu tipus, bet strukturētā vaicājumu valoda (SQL) izmanto imperatīvo darbības vārdu kolekciju, kuras mērķis ir modificēt datu bāzes shēmu — pievienojot, mainot vai dzēšot tabulu vai citu elementu definīcijas. Šos vaicājumus var brīvi apvienot ar citiem SQL vaicājumiem, nepadarot DDL par atsevišķu valodu.

### CREATE vaicājums
*Create* komanda tiek izmantota, lai izveidotu jaunu datu bāzi, tabulu, indeksu vai iekļautās procedūras.

*CREATE* vaicājums SQL izveido komponentu relāciju datubāžu pārvaldības sistēmā (RDBMS). SQL 1992 specifikācijā komponentu veidi, ko var izveidot ir shēmas, tabulas, skati, domēni, rakstzīmju kopas, komplektēšana, tulkojumi un apgalvojumi. Daudzas implementācijas paplašina sintaksi, lai varētu izveidot papildus elementus, piemēram, indeksus un lietotāju profilus. Dažas sistēmas, piemēram, PostgreSQL un SQL Server, atļauj *CREATE* un citas DDL komandas datu bāzes transakcijā, un līdz ar to tās var tikt atsauktas. 

#### CREATE TABLE vaicājums
Bieži lietota *CREATE komanda ir* *komanda CREATE TABLE*. Tipisks lietojums:
 CREATE TABLE *[tabulas nosaukums]* ( *[kolonnu definīcijas]* ) *[tabulas parametri]*
Kolonnu definīcijas ir šādas:

* Ar komatu atdalīts saraksts, kas sastāv no jebkura no šiem elementiem
* Kolonnas definīcija: *[kolonnas nosaukums]* *[datu tips]* *{NULL | NOT NULL}* *{kolonnas opcijas}*
* Primārās atslēgas definīcija: *PRIMARY KEY* ( *[ar komatu atdalītu kolonnu saraksts]* )
* Ierobežojumi: *{CONSTRAINT}* *[ierobežojuma definīcija]*
* RDBMS specifiska funkcionalitāte

Vaicājuma piemērs, lai izveidotu tabulu ar nosaukumu *darbinieki,* ar dažām kolonnām:
```sql
CREATE TABLE darbinieki (
    id               INTEGER       PRIMARY KEY,
    pirmais_vards    VARCHAR(50)   not null,
    uzvards          VARCHAR(75)   not null,
    otrais_vards     VARCHAR(50)   not null,
    dzimsanasgads    DATE          not null
);
```
Dažas *CREATE TABLE DDL* formas var ietvert DML (datu manipulēšanas valodu) - līdzīgas konstrukcijas kā *SQL* sintaksē *CREATE TABLE AS SELECT* (CTaS).

### DROP vaicājums
*DROP* vaicājums neatgriezeniski izdzēš esošu datu bāzi, tabulu, indeksu vai skatu.

*DROP* vaicājums SQL noņem komponentu no relāciju datubāzu pārvaldības sistēmas (RDBMS). Objektu veidi, kurus var neatgriezeniski izdzēst, ir atkarīgi no izmantotās RDBMS, bet lielākā daļa atbalsta tabulu, lietotāju un datubāzu neatgriezenisku izdzēšanu. Dažas sistēmas (piemēram, PostgreSQL) ļauj DROP un citām DDL komandām notikt transakcijas ietvaros un tādējādi tās var tikt atsauktas. Tipisks lietojums:
 DROP *objektatips* *objektanosaukums.*
Piemēram, komanda DROP tabulu ar nosaukumu **darbinieki**:
```text
DROP TABLE darbinieki;
```
*DROP* vaicājums atšķiras no *[[delete (SQL)|DELETE]]* un *TRUNCATE* vaicājumiem, jo *DELETE* un *TRUNCATE* nenoņem pašu tabulu. Piemēram, vaicājums *DELETE* var izdzēst dažus (vai visus) datus no tabulas, atstājot pašu tabulu datu bāzē, savukārt *DROP* vaicājums no datu bāzes izdzēš visu tabulu.

### ALTER vaicājums
Vaicājums *ALTER* maina esošu datu bāzes objektu.

*ALTER* vaicājums SQL maina objekta īpašības relāciju datubāžu pārvaldības sistēmā (RDBMS). Objektu veidi, kurus var mainīt, ir atkarīgi no tā, kura RDBMS tiek izmantota. Tipisks lietojums:
 ALTER *objektatips* *objektanosaukums* *parametri.*
Piemēram, komanda pievienot (pēc tam noņemt) kolonnu ar nosaukumu **burbuļi** esošai tabulai ar nosaukumu **izlietne** :
```sql
ALTER TABLE izlietne ADD burbuļi INTEGER;
ALTER TABLE izlietne DROP COLUMN burbuļi;
```


### TRUNCATE vaicājums
Vaicājums *TRUNCATE* tiek izmantots, lai dzēstu visus datus no tabulas. Tas ir daudz ātrāk, nekā lietot vaicājumu *DELETE* .
```sql
TRUNCATE TABLE table_name;
```


### Referenciālās integritātes vaicājumi
Cits DDL teikuma veids SQL tiek izmantots, lai definētu referenciālās integritātes attiecības, kas parasti tiek ieviestas kā primārās atslēgas un ārējās atslēgas tagi, dažās tabulu kolonnās. Šos divus vaicājumus var iekļaut teikumā *CREATE TABLE* vai *ALTER TABLE;*

## Citas valodas

* XML shēma ir XML DDL piemērs.
* JSON shēma ir JSON DDL piemērs.
* DFDL shēma ir DDL piemērs, kas var aprakstīt daudzus teksta un bināros formātus.

## Skatīt arī

* Datu komandvaloda
* Datu manipulēšanas valoda
* Datu vaicājumvaloda
* Select (SQL)
* Insert (SQL)
* Update (SQL)
* Delete (SQL)
* Truncate (SQL)

## Atsauces

## Ārējās saites

* Oracle ALTER TABLE MODIFY column 
* DDL Commands In Oracle