2.5.4 Andmete määratluskeele tähtsamad korraldused

Tabeli loomiskorraldus (create table) võimaldab luua tabelit ja lihtsustatud vorm on:
create table tname (colname coltype [not null], ...);
Siinjuures on kasutatud tähistusi:
tname - loodava tabeli nimi;
colname - veerunimi;
coltype - veeru andmetüüp;
not null - kui on lisatud, siis ei saa veerus olla tühja väärtust ja andmed tuleb sellesse veergu sisestada!
Mõned võimalikud andmetüübid on toodud järgnevas tabelis.
Tüüp |
Tähendus |
integer |
32 bitine täisarv |
smallint |
16 bitine täisarv |
float |
64 bitine ujuvkomaga arv (12 tüvenumbrit) |
smfloat |
32 bitine ujuvkomaga arv (7 tüvenumbrit) |
char(n) |
String (tekst) n sümbolist |
varchar(n) |
Muutuva pikkusega string (sümbolite suurim arv on n) |
date |
Kuupäev (päevade arv peale 31 Dec. 1899) ( 01 Jaan 1900 on päev 1) (tuntud ka Juliuse kalendri kuupäevana) |
Tabeli
loomise käsu juurde peab olema lisatud tabel nimi ja tabeli veergude nimekiri.
Iga veeru jaoks on vajalik näidata andmetüüp ja osutama, kas vastav veerg võib
või ei või olla jäetud tühjaks (omada null - väärtust *).
Null value
tähendab SQL puhul mitte väärtust "0" (zero value) vaid tühja, ilma sisuta välja!
Programmeerimiskeeles on sellele sarnaseks vasteks tühiviit, tavaelus väärtuse
mitteteadmine.
Näited: |
Create table tudengid (tkood integer not null, eesnimi char(10) not null, perenimi char(15) not null, synnipaev date); |
Tabeli koos oma struktuuri ja sisuga tühistamiseks (kustutamiseks) võib kasutada korraldust:
drop table tname;
Kus
tname - kustutatava tabeli nimi.
Näited: |
Drop table tudengid; |
Tabeli struktuuri muutmiseks võib kasutada järgmisi korraldusi:
alter table tname modify ( colname coltype [not null], ...);
alter table tname add ( colname coltype [not null], ...);
alter table tname delete ( colname, ...);
Kus tname, colname, not null tähendus on toodud ülalpool (tabeli loomine)
Esimene
korraldus muudab veeru/veergude andmetüüpe. Andmetüüpide muutmine on alati
võimalik, kui tabel on tühi, kuid võib osutuda võimatuks, kui tabelis on
andmed.
Kas see on võimalik, või mitte see sõltub andmete "vahetatavusest":
näiteks on alati võimalik muundada arv stringiks, aga vastupidine on võimalik
ainult siis, kui string esindab arvu. Mõne teisendusega võib kaasneda andmete
kaotus: näiteks stringi muutmine väiksema pikkusega stringiks või float tüüpi
andmete muutmine smfloat tüüpi andmeteks.
Teine korralduste rida võimaldab veeru/veergude lisamist tabelisse: see võib
osutuda võimatuks, kui tabel sisaldab andmeid ja lisatav veerg ei luba null
väärtust (mõni SQL versioon lubab lisamiseks kasutada niinimetatud
"vaikeväärtust" sellise probleemi lahendamiseks).
Kolmas korralduste rida võimaldab veeru tühistamist (kustutamist): kui see
veerg sisaldab andmeid, kustutatakse nad samuti.
Näited: |
Alter table tudengid add (pikkus smallint); |
Alter table tudengid modify (pikkus float); |
Alter table tudengid delete (pikkus); |
Järgmist korraldust kasutatakse indeksi loomiseks:
create [unique] index idxname on tname (colname, ...);
kus on kasutatud tähiseid
unique - kui kasutatud, tähendab, et indeks on unikaalne;
idxname - loodava indeksi nimi;
tname - tabelinimi;
colname - veerunimi.
On kasulik teada, et pole võimalik luua unikaalset indeksit tabelile, mis juba sisaldab andmeid, kui andmed ei vasta unikaalse indeksi loomusele.
Näited: |
Create unique index tudengiid on tudengid (tkood); |
Create index tudenginimi on tudengid (perenimi, eesnimi); |
Järgmise korraldusega saab indeksi tühistada:
drop index idxname;
Kus idxname on kustutatava indeksi nimi.
Indeksi tühistamisel ei loe, kas indeks on unikaalne või mitte. Indeksite muutmisvõimalusi keeles pole: muutmiseks tuleb indeks kustutada ja uuesti luua. Indeksi tühistamine ei põhjusta andmete kaotust, aga tasub teada, et unikaalse indeksi tühistamine võib luua olukorra, kus vahepealne andmete lisandumine võib põhjustada tema taasloomise võimatuse.
Näited: |
drop index tudenginimi; |
Ülesandeid
Koosta tabel koerte andmete hoidmiseks (kood, koeranimi)
Lisa tabelisse synniaeg.
Lisa koodi jaoks unikaalne indeks
Ühiseks ja igal pool toimivaks standardiks on üldjuhul SQL-92 (aastanumber). Andmebaasisüsteemid on hulgaliselt teinud täiendusi andmetüüpide ja käskude lisavõimaluste juures, samuti näiteks primaarvõtme ja automaatsete koodide loomisel. Nii et ühes keskkonnas kokku pandud vähegi keerukamate käskude üle viimine teise võib küllalt keeruliseks osutuda.Vihjeid
CREATE TABLE koerad (kood INT, koeranimi VARCHAR(30));
ALTER TABLE koerad ADD synniaeg DATE;
CREATE UNIQUE INDEX koeraindeks ON koerad(kood)