SQL Teine loeng
Mõtelda CREATE TABLE <table name> (<column name> { INTEGER VARCHAR(10)} [ NOT NULL] );
Standard SQL-86 (ANSI X3.135-1986), ISO võttis üle 1987 SQL-89 (ANSIX3.135-1989) SQL-92 (ISO/IEC 9075:1992) SQL3 ehk SQL-99 SQL-2003
Standardi jaotus SQL/Framework põhimõtted SQL/Foundation süntaks ja operatsioonid SQL/Call-Level Interface (CLI) API SQL/Persistent Stored Models (PSM) juhtstruktuurid programmide jaoks SQL/Host Language Bindings meetodid sidumaks SQL lausendid progr.keelde
Keskkond, kasutajad, õigused
Grupimõisted Tabelid, vaated, trigerid, jpm on objektid Objektid on grupeeritud skeemi Skeemid moodustavad kataloogi Kataloogid asuvad klastris
SQL keskkond
Skeem Objektide kogum Üks omanik <AuthorizationID>
Create schema (SQL 99) CREATE SCHEMA {<skeemi nimi> [<skeemi nimi>] AUTHORIZATION <authid>} [ <skeemi elementide loend>] Loend ::= CREATE TABLE käsud CREATE VIEW käsud.. GRANT käsud
Create schema (ASA10) Näiliseks ühilduvuseks! CREATE SCHEMA AUTHORIZATION <uid> [tabelite loomise käsud vaadete loomise käsud õiguste andmise käsud] Skeem tekib objektide loomisega kasutajale!
AuthID??! Standardiväline Operatsioonisüsteemi kasutajad Informix, DB2 Eraldi spetsiaalse käsuga loodud kasutajad Sybase, Oracle Lisaks sissekirjutatud süsteemsed kasutajad Nt dba ja sys ASA10's
Kasutajate haldus ASA10-ga GRANT CONNECT TO <uid> [IDENTIFIED BY <password>] Ka parooli muutmiseks Loome kasutaja: GRANT CONNECT TO tudeng IDENTIFIED BY tud
Millised on õigused? SELECT * FROM mina Table mina not found SELECT * FROM dba.mina Permission denied
Kasutajate grupid ja õigused Kasutaja kuulub gruppi: Näeb objekte (otse) Ei tarvitse saada midagi teha Kasutajal on õigused määratud: Ei näe otse objekte Saab teha määratud tegevusi
Kasutajagrupi haldus (ASA10) GRANT GROUP TO dba Saab määrata grupile liikmeid GRANT MEMBERSHIP IN GROUP dba TO tudeng Konkreetne kasutaja pandi gruppi
Milline seis nüüd? SELECT * FROM mina Permission denied SELECT * FROM dba.mina Permission denied
Õiguste andmine GRANT {õigused} ON <tabel> TO <uid> Õigused: ALL SELECT [(veerg1,...)] DELETE INSERT UPDATE [(veerg1,...)]
Hoiatus Kui on: pole antud vaatamisõigust kõigile veergudele, siis annab SELECT * FROM.. vea! GRANT SELECT (eesnimi) ON mina TO tudeng SELECT * FROM mina -> viga! SELECT eesnimi FROM mina -> ok!
Grupi kaotamine REVOKE MEMBERSHIP IN GROUP dba FROM tudeng Ühe kasutaja eemaldamiseks REVOKE GROUP FROM dba Grupi mõiste kaotamiseks, üksiti eemaldatakse kõik kasutajad grupist
Tabelite loomine
Tabelite liigid Baastabel (reaalselt eksisteeriv, sisaldab andmeid, andmeid saab muuta) Ajutine baastabel (sessioonipõhine) Vaade (lihtsustus, andmeid võib saada muuta) Edaspidi vaadet tabeliks ei kutsu!
Tabelite liigid (lisaks) (ASA10) Proxy tabel Asub teises andmebaasis (tootja pole oluline) Create server... Create existing table...
Süntaks CREATE TABLE <nimi> (...) Sulgudes (komaga eraldatult): Veergude definitsioonid Tabeli üldised kitsendused (constants)
Veeru definitsioon Veeru nimi Veeru andmetüüp [NOT NULL] [DEFAULT <vaikeväärtus>] [kitsendused]
Andmetüübid (1) VARCHAR (maksimaalne pikkus) LONG VARCHAR (=TEXT) INTEGER - 4 baiti, SMALLINT - 2 baiti BIGINT - 8 baiti NUMERIC, DECIMAL (kogupikkus, komatagune pikkus) DOUBLE mida iganes 8 baidiga saab
Andmetüübid (2) DATE, DATETIME, TIME BIT (NULL pole lubatud) BINARY (xx), LONG BINARY (ehk BLOB)
Vaikeväärtused CURRENT... CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, CURRENT_USER AUTOINCREMENT NULL (taastamiseks) Konstandid, muutujad
Vaikeväärtused ASA10-s CURRENT - alakriipsu asemel tühik! CURRENT TIMESTAMP,... TIMESTAMP Täiendavalt, NB! Ilma sõnata Current! GLOBAL AUTOINCREMENT Replikeerimise jaoks
Veeru kitsendused [CONSTRAINT <nimi>] {UNIQUE PRIMARY KEY CHECK (tingimus)} NB! Tingimus sisaldab veeru nime... maks integer not null check (maks > 700)... ASA10 veel lisaks: COMPUTE (avaldis) Tekib read-only veerg
Tabeli kitsendused Hõlmavad üldjuhul rohkem kui ühte veergu CONSTRAINT pk_isik PRIMARY KEY (eesnimi, perenimi, synnipaev) CONSTRAINT chk_palk CHECK (brutopalk > netopalk)
Ajutised tabelid CREATE GLOBAL TEMPORARY TABLE paha (nimi VARCHAR(40) NOT NULL, CONSTRAINT pk_paha PRIMARY KEY (nimi)) ON COMMIT PRESERVE ROWS INSERT INTO paha (nimi) VALUES ( Mari ) SELECT * FROM paha
Tabeli kustutamine DROP TABLE <nimi>
Ülesanne nr 2 Lisada oma andmebaasi loengus näidatud ajutine tabel paha. Luua tavalised tabelid Isik Id integer not null default autoincrement primary key Eesnimi varchar (50) not null Perenimi varchar(50) not null Isikukood varchar(11) Klubi integer Unique (eesnimi, perenimi)
Ülesanne nr 2 (järg) Klubi Id integer not null default autoincrement primary key Nimi varchar(100) not null unique Turniir Id integer not null default autoincrement primary key Nimetus varchar(100) not null unique Toimumiskoht varchar(100) Alguskuupaev date not null Loppkuupaev date
Ülesanne nr 2 (järg) Partii Id integer not null default autoincrement primary key Turniir integer not null Algushetk datetime not null default current timestamp Lopphetk datetime Valge integer not null Must integer not null Valge_tulemus smallint check (valge_tulemus in (0,1,2)) Musta_tulemus smallint check (musta_tulemus in (0,1,2)) Kokkuvote varchar(5000)