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:

```
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**:

```
DROP TABLE darbinieki;

```
*DROP* vaicājums atšķiras no *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** :

```
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* .

```
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
--------

1. ↑  T. William Olle. *The Codasyl Approach to Data Base Management*. Wiley, 1978. ISBN 0-471-99579-7.
2. 1 2  «Information Technology - Database Language SQL». *SQL92*. Carnegie Mellon. Skatīts: 2018. gada 12. novembris.
3. ↑  Douglas Laudenschlager, Gene Milener, Craig Guyer, Rick Byham. «Transactions (Transact-SQL)». *Microsoft Docs*. Microsoft. Skatīts: 2018. gada 12. novembris.
4. ↑  «PostgreSQL Transactions». *PostgreSQL 8.3 Documentation*. PostgreSQL. Skatīts: 2018. gada 12. novembris.
5. ↑  
Grant Allen. *The Definitive Guide to SQLite*. Apresspod (2 izd.). Apress, 2010. 90–91. lpp. ISBN 9781430232254. The *create table* statement has a special syntax for creating tables from *select* statements. [...]: [...] *create table foods2 as select \* from foods;* [...] Many other databases refer to this approach as *CTaS*, which stands for Create Table as Select, and that phrase is not uncommon among SQLite users.

Ārējās saites
-------------

* Oracle ALTER TABLE MODIFY column Archived 2021. gada 21. aprīlī, *Wayback Machine* vietnē.
* DDL Commands In Oracle Archived 2021. gada 21. aprīlī, *Wayback Machine* vietnē.