Know-how, előadás, nyelv sql

8.2 Szabványok és nyelvi struktúrák, tárolt adatbázis objektumok

Az SQL nyelv relációsan teljes. Ez a relációs számításokon alapul, azonban a relációs algebra mûködését tartalmazza. A műveletet leggyakrabban használják

  • INTERSECT - kereszteződés;
  • MINUS a különbség.
8.2.1 SQL szabványok

Az ANSI által 1986-ban elfogadott SQL1 nyelvi szabvány csak lekérdezéseket ír le. Ezzel a WinRDBI-ben dolgozhat. Jelenleg az SQL1 nem használható.

Az ipari DBMS-ek a következő változatokon alapulnak:

Az SQL2 verziója vezérli, de több nyelvi kiterjesztést is figyelembe veszünk ezen a verzión túl. Nyilvánvaló, hogy a nyelv formális alapjainak megismerése fontos, de nem elég, hogy csak kézműves alapot eredményezzen: "csináld egyszer, kétszer". Fontos megérteni, hogy miért rendezik a nyelvet. Az objektum belső struktúrájának vagy a jelenség lényegének megértése érdekében mindig készen áll arra, hogy észlelje változásait.

Három szint van SQL-közvetlen, beépített és dinamikus. Az első szint közvetlen kapcsolatot biztosít a felhasználó és a DBMS között. A beépített SQL meghatározza a más nyelveken beágyazott konstrukcióit. A COS-ban a beágyazott SQL szöveg a zárójelbe kerül sql (text_SQL). Lásd a 8.9 fejezetet a részletekért. Végül, a dinamikus SQL lehetővé teszi, hogy közvetlen SQL konstrukciókat hozzon létre "mozgásban" és végrehajtsa azokat.

Emlékezzünk arra, hogy milyen módon mentünk el. Először is, már tudjuk, hogy alapuló relációs algebra alapú lekérdezés nyelv, és a többi lekérdező nyelvek lehet relációsan teljes csak akkor teszi lehetővé, hogy megvalósítsa a ekvivalens ezeket a kérelmeket, amelyek alapján létrejött a relációs algebra.

Már elmondtuk, hogy a számítások és a relációs algebra segítségével használt nyelvek közötti egyik fő különbség az eljárási fok. A relációs algebra nyelve teljesen eljárási, vagyis azt írja le, hogy hogyan és mi történik, hogy a válasz szó szerint lépéseket tegyen. A számításon alapuló nyelvek gyengén eljárási jellegűek. Az ezeken a nyelveken írt lekérdezés meghatározza azokat a tulajdonságokat, amelyeknek a lekérdezés eredményeként kapott adatoknak meg kell felelniük, de a lekérdezés végrehajtásának módja nincs megadva.

A probléma az, hogy a DBMS különböző megvalósításaiban az eredmény elérésének módjai teljesen eltérőek lehetnek. Ezért, amikor olyan lekérdezést írtál fel, amely megadja a lehetőséget, hogy megkapja az adatokat, akkor még mindig azt kell gondolnia, hogy jól teljesít-e a kiválasztott adatbázisban. A közös nyelven azt mondják, hogy (vagy a DBMS-nek) ki kell választania az optimális végrehajtási tervet. Természetesen az optimális végrehajtási tervekkel kapcsolatos lekérdezések létrehozása egy másik programozási tudásréteg, amely mélyebben, mint a lekérdezés készítésének képessége.

Mégis, már tudjuk, hogy valójában a matematikai modellek képesek csak lekérdező nyelveket készíteni. Ezért az előző szakaszokban nem hoztuk létre és változtattuk meg az adatbázis sémát. Úgy vélték, hogy már létezik egy kapcsolat vagy egy faszerkezet, és nem is próbáltuk kitölteni az eredeti adatokat. Természetesen érted, hogy ha az adatbázissal szeretnénk együttműködni, be kell állítanunk az alkalmazás sémáját, meg kell változtatnunk és kitöltenünk az adatokat. Az üzleti élet megváltozik, az információs igények megváltoznak, és persze valahogy nyomon kell követnünk mindezt. Ezért a végrehajtott DBMS-ben használt nyelvek - a lekérdezések készítésén kívül - lehetővé teszik az adatbázis-objektumok létrehozását, módosítását, törlését és az adatok kezelését. Ez utóbbi azt jelenti, hogy beillesztheti, frissítheti és törölheti azokat. Ez egy ilyen bonyolult kép kiderül.

Az SQL-et nem teljesen standard módon tanulmányozzuk. Mint mindig, szinte mindent tesztelhetünk a gyakorlatban. Ezenkívül fokozatosan előkészítik az anyagot, amely lehetővé teszi számunkra, hogy a szokásosnál mélyebben elsajátítsuk a tankönyveket, tanulmányozzuk a szemantikát, izoláljuk és hozzáadjuk az adatokhoz kapcsolódó jelentéseket.

8.2.2 SQL Sublanguages

A következő al-nyelvek az SQL-ben vannak megadva:

  • Az adatmeghatározási nyelv (JOD). Ő is egy Data Definition Language (DDL). Meghatározza az adatbázis struktúráját, beállítja a tárolt objektumokat és a hozzáférési jogosultságokat.
  • Az adatkezelés nyelve (NMD). Ő is a Data Manipulation Language (DML). Beilleszti, frissíti és törli az adatokat, és lekérdezéseket hajt végre rájuk.
  • Az adat / tranzakciókezelés (JAD) nyelve. Data Control Language (DCL). A tranzakciókat kezeli.

Egy megjegyzés a JAD-ról. Már figyeltünk arra a szükségességre, hogy együtt dolgozzunk a felhasználókkal, amikor beszélgettünk a számvitel fontosságáról, aki kérdéseket tesz fel az adatbázis tartalmával kapcsolatban, és milyen feltételek mellett. Tehát a felhasználói DBMS jogosultságait a jogosultságok határozzák meg. Például a CREATE SESSION jogosultság lehetővé teszi a felhasználó számára az adatbázishoz való kapcsolódást, az ALTER TABLE jogosultsággal módosíthatja a táblázatokat stb.

Általánosságban elmondható, hogy a felhasználókat különböző DBMS-ben kezelik. Az Oracle például megköveteli, hogy a létrehozott felhasználó minden jogát teljes egészében leírják. Ez azt jelenti, hogy ha olyan felhasználót hoztam létre, akinek neve és jelszava van, akkor még nyitott egy munkamenet is, vagyis csatlakozik a DBMS-hez. Golenky, mint Pinocchio, mielőtt ecsettel ellátott sapkát kapna. Minden jogosultságot explicit módon kell megadni a felhasználó számára. Természetesen kiválaszthatja a kiváltságok gyűjteményeit - szerepköröket - és felhasználhatja őket, olyan nyilvános felhasználót definiálhat, amelynek jogai minden felhasználó számára elérhetők, és így tovább.

Az adatkezelési nyelvek lehetővé teszik az adatok beillesztését, frissítését és törlését. Általában a lekérdező nyelv az adatkezelési nyelv részének számít, bár néha megkülönböztethető. Az a tény, hogy a lekérdezési nyelv alapvetően egyetlen SELECT sablon alapján épül fel, de nagyon bonyolult.

A tranzakciókezelés nyelvéről a 6.2 fejezetben beszéltünk. Ne feledje: a tranzakció kezdete BEGIN TRANSACTION, a tranzakció befejezése COMMIT vagy ROLLBACK. Valójában vannak más utasítások, de kevésbé gyakoriak.

8.2.3 Használt terminológia

És néhány megjegyzés a terminológiáról. Az első, valójában, nem kapcsolódik az SQL-hez, hanem ahhoz a tényhez, hogy a megvalósítás tabuláris terminológiát használ, azaz nem a kapcsolatot, hanem a "táblát", nem a "tuple" -t, hanem a "stringet". Az attribútum nevezik, attól függően, hogy tetszik, vagy egy oszlop vagy egy oszlop (8.1. Táblázat).

8.1. Táblázat. A HLM és az SQL feltételeinek való megfelelés

Nem szabad megfeledkeznünk arról, hogy az SQL modern verziói kiterjedt relációs adatmodellekben működnek. És ezek a kiterjesztések annyira nagyok, hogy érthető, hogy nem beszélnek relációs adatbázisokról, hanem relációs vagy táblázatos típusú adatbázisokról. Az angol "kifejezés" kifejezés, amely meghatározza a nyelvi konstrukciókat, az "operátor", "parancs", "kifejezés" fordítása az orosz irodalomban. Az "utasítás" fogalmát fogjuk használni, mivel a "parancsnak" több eljárási jelentése van, mint amit szeretnénk, és az "operátor" és a "kifejezés" kifejezés kettős jelentéssel bír.

Az utasítások összetevői kifejezéseknek számítanak.

8.2.4 Az adatbázis tárolt tárgyai

A relációs adatbázis alapja tárolt objektumok. Ezek táblák, nézetek, indexek, triggerek, szekvenciák és felhasználók. Gondoljunk ezekre a fogalmakra. Ha nem érti mindent, ne legyen zavarban - később részletesebben tárgyaljuk.

A táblák tárolják az adatokat. Figyeljünk egy látszólag triviális körülményre: a táblázat nem menti el az adatok változásainak történelmét. Nem minden táblázat azonos. Amit egyszerűen asztalnak neveznek, lehet egy táblázat, amelyet gyűjteményként szerveznek. Indexszerűen szervezett táblázatok (IOT index szervezett táblázat) használhatók. Ezekben a táblázatban található adatok az indexfa levélcsomópontjaiban vannak tárolva.

A második tárolt objektum egy nézet, a program zsargonban ez egy nézet. Az adatát tartalmazó táblától eltérően azonban csak az a lekérdezés, amelyre a reprezentáció épül, az adatbázisban tárolódik. A nézet, mint az asztalhoz, van egy neve, és amikor elérjük a nézetet, a létrehozó lekérdezés a felhasználó kérésével egyezik meg. Aztán megvizsgáljuk, hogyan történik ez.

Mutatók. Ez olyan adatelérési szervezet, amely felgyorsíthatja a hozzáférést, de mindig lelassítja az adatok manipulálását. Leggyakrabban a B * -indexeket és a bitbit indexeket használják. Részletesebben, megnézzük az indexeket az "Adattárolás és hozzáférés" részben.

A triggerek olyan speciális folyamatok, amelyek egy esemény bekövetkezésekor indulnak el, egy trigger eseménynek nevezik.

Az alapot akkor hívják aktívnak, ha valamit túllép a kérdezettől. Képzeljük el, hogyan működik az "elsődleges kulcs" integritás korlátja. Amint megpróbálja írni az adatokat az asztalhoz, az integritási kényszer okozza a belső eljárást, amely megvizsgálja, hogy az elsődleges kulcs értéke megismétlődik-e. Ha igen, akkor a bemenet nem engedélyezett, és ha nem, engedélyezett. Fontos megérteni, hogy az alkalmazásokban az adatbázis aktív viselkedését leggyakrabban a triggerek szervezik.

Sorozatok (sorrend). Ez egy újabb új tárgy, valószínűleg nem szokott hozzád. Valójában az egymást követő értékek generátorja minden lehetséges variánssal (ciklusok, nem ciklikus stb.)

(Felhasználói). Számos hozzáférési probléma és hozzáférési korlátozás társul hozzájuk. Már elmondtuk, hogy a felhasználók eltérő bázisokon vannak szervezve.

Valójában nem lehet minden gyakorlati problémát megoldani csak SQL nyelv segítségével. Ezért a modern DBMS-eknek van egy erős eljárási része, amely különbözik a különböző DBMS-ekben.

Az eljárási részben az alábbi tárolt objektumok kerülnek hozzáadásra:

  • Eljárás (eljárás);
  • Funkciók (funkció);
  • Triggerek (trigger);

Van egy másik eljárási objektum is, amelyet nem tárol az adatbázisban. Ez a kurzor. Lehet, hogy hozzászokott ahhoz a tényhez, hogy a kurzor olyan kép, amelyen egér vagy érintőpad van a képernyő körül. Valójában az SQL szabványban a kurzor a tárolásra szánt tárolási területként van definiálva, először a kurzor nevét, másodsorban a lekérdezést, amelyen a kurzor alapul, és harmadszor a kurzor által az adatbázisból kiválasztott adatok. Van egy mutató az eredő adatvonalakra.

Megjegyezzük, hogy az eljárási részben az indító megismétlése nem hiba. A triggerek különleges eljárások.

Az eljárások és funkciók csomagokba csoportosíthatók.

Megjegyzés. Az indexeket az "Adattárolás és a hozzájuk való hozzáférés" című részben tanulmányozzák. "Adattárolás és hozzáférés hozzájuk." A DBMS eljárási részét ebben a kurzusban csak az objektummodellek vizsgálata során vizsgálják.

8.2.5 Adattípusok az SQL-ben

Az SQL-92 szabvány megadott adatok halmaza által definiált kulcsszóval: KARAKTER, képességgel, változó, BIT BIT változó, numerikus, decimális, egész, smallint, úszó, REAL, dupla pontosságú, dátum, idő, TIMESTAMP, és időközben. A későbbi SQL szabványokban ez a lista jelentősen bővült.

A könyvben használt összes adatbázisban végrehajtott típusok egy kis részét fogjuk dolgozni. Ezek a karakterlánc típusai, pontos numerikus típusai, hozzávetőleges numerikus típusok, dátum és idő típusok (datetime). A gyűjteménytípusok, a felhasználó által definiált típusok és a referenciatípusok az objektummodellek tanulmányozása során az "Objektumadatmodellek" -ben lesznek figyelembe véve.

A könyvben szereplő más típusokat egyáltalán nem veszik figyelembe. Keresse meg őket a DBMS dokumentációjában, amelyet használni fog.

8.2.6 A karakterláncok típusai
  • A CHAR meghatározza a rögzített hosszúságú karakterkészleteket Ha a specifikáció CHAR (5) -et határozza meg. és az "abc" érték be van írva, akkor például az állandó "abc" az Oracle-ben tárolódik. amely két sorral rendelkezik a vonal végén.
  • A VARCHAR olyan változó hosszúságú karakterkészleteket határoz meg, amelyek pontosan a betöltött karaktereket tárolják, de a VARCHAR (n) specifikációban megadott értéket nem meghaladó mennyiségben. Egyébként az Oracle-ben kívánatos ezt a típust VARCHAR2-nek nevezni.

Vegye figyelembe, hogy a gyorsítótárban a CHAR és a VARCHAR típusok nem különböztethetők meg a viselkedéstől, mivel a karakterláncot lezáró terek mindig törlődnek.

8.2.7 Számtípusok

A pontos számtípusokat (rögzített pont típusok) és a hozzávetőleges (lebegőpontos) típusokat a 8.2. Táblázat foglalja össze:

A gyorsítótárban a NUMBER (n, s) típusban az n pontossága 21, de megváltoztatható. A NUMBER típusú, argumentumok nélkül megadja az egész számokat -9223372036854775807 és +9232372036854775808 között. Az Oracle n<38, а значение s, определяющее положение младшего разряда от —84 до +127.

8.2.8 Dátum és idő típusok

A könyvben használt dátum és idő típusát a 8.3 táblázat tartalmazza.

8.3 táblázat. Megfelelő dátum és idő típusok

Belső formátum - a napok száma 1998.10.31-től

01.01.4712-től RX-től 1999.12.31-ig a PX után

Frakcionális másodpercek 0 és 9 bites között (alapértelmezett 6)

A DATE típus értékei három összetevőből állnak: év, hónap és dátum. Az év jelentését a Krisztus Születés Krónikája határozza meg. Az egyik lehetséges kimeneti formátum "yyyy-mm-dd", ahol minden összetevő - év, hónap és nap - tizedes számokkal szerepel. A gyorsítótárban a kezdő dátum: -31.12.1840.

A TIME típusú értékek egy másodperc óra, perc, másodperc és adott esetben törtrészének értékeiből állnak.

A TIMESTAMP típus egyesíti az előző két típus adatait.

Kapcsolódó cikkek