P°φkaz CREATE TABLE (SQL)

p°φkaz_CREATE_TABLE ::= CREATE TABLE [schema.]jmΘno_tabulky [ WB_p°φznak à ] (popis_elementu {, popis_elementu}à )
WB_p°φznak ::= NO_JOURNAL | ZCR | UNIKEY | LUO | TOKEN | DETECT | REC_PRIVILS | DOCFLOW
popis_elementu ::= popis_sloupce | popis_omezenφ_tabulky
popis_sloupce ::= jmΘno_sloupce typ [ [cφl] ][ PREALLOC=n ][ EXPANDABLE ] [ DEFAULT implic_hodnota ] [vlastnost_sloupce {, vlastnost_sloupce}à ] [ COLLATE uspo°ßdßnφ_°et∞zce ]
implic_hodnota ::= v²raz | USER | UNIQUE 
vlastnost_sloupce ::= UNIQUE | PRIMARY KEY | INDEX | NOT NULL | REFERENCES jmΘno_tabulky jmΘno sloupce | CHECK ( podmφnka )
uspo°ßdßnφ_°et∞zce ::= CSISTRING | CSSTRING
popis_omezenφ_tabulky ::= [CONSTRAINT jmΘno_vlastnosti] vlastnost_tabulky 
vlastnost_tabulky ::= { UNIQUE | PRIMARY KEY | INDEX } (v²raz [sm∞r] {, v²raz [sm∞r] }à ) | CHECK ( podmφnka ) | omezenφ_FOREIGN_KEY
sm∞r ::= ASC | DESC
omezenφ_FOREIGN_KEY ::= FOREIGN KEY (jmΘno_sloupce {, jmΘno_sloupce}à ) REFERENCES [schema.]jmΘno_tabulky [ jmΘno_sloupce {, jmΘno_sloupce}à ] [ UPDATE_akce ] [ DELETE_akce ]
UPDATE_akce ::= ON UPDATE akce_referenΦnφ_integrity
akce_referenΦnφ_integrity ::=  SET NULL | SET DEFAULT | CASCADE | NO ACTION 
DELETE_akce ::= ON DELETE akce_referenΦnφ_integrity

Popis

P°φkaz CREATE TABLE vytvo°φ novou prßzdnou tabulku.

P°φkaz obsahuje jmΘno novΘ tabulky a jejφ popis. Popis tvo°φ popisy jednotliv²ch sloupc∙ a popis takov²ch vlastnostφ tabulky, kterΘ nelze definovat ji₧ v popisu sloupce (nap°. index podle v²razu nebo referenΦnφ integritu).

WB p°φznaky jsou oznaΦenφ pro WinBase602 specifick²ch vlastnostφ tabulky (kterΘ jsou nad rßmec normy SQL). NO_JOURNAL - nezapisovat zm∞ny v tabulce do ₧urnßlu zm∞n, ZCR - umo₧nit replikace, UNIKEY - vytvo°it unikßtnφ index pro replikace, LUO - brßnit vzniku replikaΦnφch ozv∞n, TOKEN - umo₧nit p°edßvßnφ replikaΦnφho peÜka, DETECT - detekovat replikaΦnφ konflikty, REC_PRIVILS - p°id∞lovat zßznamovß prßva, DOCFLOW - umo₧n∞nφ kolob∞hu dokument∙.

Popis jednotlivΘho sloupce zaΦφnß jmΘnem a typem. Jako datov² typ je nutnΘ uvΘst typ z jazyka SQL a nikoliv z WinBase602. P°ehled vzßjemn∞ ekvivalentnφch datov²ch typ∙ z obou dvou jazyk∙ - viz p°ehled typ∙ . Definujete-li ukazatel, uve∩te za typem cφlovou tabulku v hranat²ch zßvorkßch. Definujete-li multiatribut, musφte uvΘst za dan²m typem klφΦovΘ slovo PREALLOC s poΦtem rezervovan²ch hodnot nebo EXPANDABLE pro p°ekroΦenφ rezervovanΘho poΦtu hodnot, p°φpadn∞ obojφ.

DalÜφ ·daj je nepovinnΘ zadßnφ implicitnφ hodnoty sloupce. Zadanß hodnota musφ b²t v²raz stejnΘho typu jako sloupec. Implicitnφ hodnotu nelze zadat pro multiatribut, sloupce prom∞nnΘ velikosti a sledovacφ atributy.

Pro °et∞zce lze jako implicitnφ hodnotu pou₧φt specißlnφ hodnotu USER, kterß zp∙sobφ, ₧e se do tohoto sloupce ulo₧φ jmΘno u₧ivatele vklßdajφcφho zßznam. Pro binßrnφ °et∞zec se p°i pou₧itφ USER zapφÜe binßrnφ ID u₧ivatele. Pro sloupce typu datum, Φas nebo Timestamp lze jako implicitnφ hodnoty pou₧φt funkce CURRENT_DATE, CURRENT_TIME nebo CURRENT_TIMESTAMP.

Pro typ Integer lze pou₧φt specißlnφ hodnotu UNIQUE, kter² zp∙sobφ, ₧e systΘm mu bude automaticky p°id∞lovat unikßtnφ hodnoty. Tento mechanismus funguje pouze tehdy, pokud do tohoto sloupce nebudete nikdy nic explicitn∞ zapisovat. V opaΦnΘm p°φpad∞ se m∙₧e stßt, ₧e systΘm zapφÜe do novΘho zßznamu stejnou hodnotu, jakou jste ruΦn∞ zapsali do jinΘho zßznamu. ╚ast∞jÜφ je pro zφskßvßnφ unikßtnφch hodnot pou₧itφ sekvencφ.

Vlastnosti sloupce majφ tento v²znam:

Uspo°ßdßnφ °et∞zce se smφ pou₧φt pouze u °et∞zcov²ch typ∙. Pokud chcete mφt °et∞zec typu CSSTRING nebo CSISTRING uve∩te tento typ za vyhrazenΘ slovo COLLATE.

V popisu vlastnostφ tabulky se definujφ ty vlastnosti, kterΘ se t²kajφ jednoho nebo vφce sloupc∙.

Pro popis referenΦnφ integrity se pou₧φvajφ nßsledujφcφ pojmy:

Akce referenΦnφ integrity dovoluje specifikovat, co mß server provΘst, pokud:

K pravidlu referenΦnφ integrity smφ b²t p°ipojena nejv²Üe jedna akce ON UPDATE a nejv²Üe jedna akce ON DELETE.

Ne-li specifikovßna ₧ßdnß akce referenΦnφ integrity nebo je-li specifikovßna akce NO ACTION, pak ve v²Üe popsan²ch situacφch dojde k chyb∞, kterß zp∙sobφ odvolßnφ p°φkazu. Tφmto zp∙sobem server zamezφ poruÜenφ pravidla referenΦnφ integrity. Ostatnφ akce dovolujφ p°edepsat odliÜnΘ chovßnφ:

P°i provßd∞nφ akcφ referenΦnφ integrity se nekontrolujφ prßva k provßd∞nφ zm∞n v pod°φzenΘ tabulce. Akce se provede, pokud klient mß prßvo provΘst zm∞nu, kterß akci vyvolßvß, v nad°azenΘ tabulce. SpouÜt∞nφ trigger∙ provßd∞nφm akcφ referenΦnφ integrity je zßvislΘ na nastavenφ p°φznak∙ kompatibility pomocφ funkce Set_sql_option.

P°i poruÜenφ omezenφ sloupc∙ nebo tabulky (NOT NULL, UNIQUE, CHECK nebo referenΦnφ integrity) nastane p°i ukonΦenφ transakce chybov² sqlstate 40002.

P°φklad pou₧itφ:

CREATE TABLE Zamestnan (
cislo INTEGER PRIMARY KEY NOT NULL CHECK (cislo > 0),
jmeno CHAR(12) COLLATE CSISTRING, 
prijmeni CHAR(20) INDEX COLLATE CSISTRING,
dat_nast DATE,
plat NUMERIC(14,2) DEFAULT 10000 INDEX,
oddeleni SMALLINT,
podobenka VARBINARY,
deti CHAR(12) EXPANDABLE COLLATE CSISTRING,
INDEX (oddeleni),
INDEX (prijmeni, jmeno),
CONSTRAINT pojisteni INDEX (plat*0.135 DESC) ,
FOREIGN KEY (oddeleni) REFERENCES Oddeleni (cislo_odd) ON UPDATE CASCADE)