Az SQL a mi mindenünk

Ahogy valószínűleg már sejti, az SQL-kiszolgálónak minden parancsot ki lehet adni SQL-lekérdezéseken keresztül. Minden.

Ezeket a csapatokat hivatalosan 4 csoportra osztják:

  • adatdefiníciós utasítások (Data Definition Language, DDL ):

    • A CREATE létrehoz egy adatbázis-objektumot (magát az adatbázist, táblát, nézetet, felhasználót és így tovább)
    • ALTER megváltoztat egy objektumot
    • A DROP eltávolít egy objektumot
  • adatmanipulációs operátorok (Data Manipulation Language, DML ):

    • A SELECT az adott feltételeknek megfelelő adatokat választja ki
    • Az INSERT új adatokat ad hozzá
    • UPDATE módosítja a meglévő adatokat
    • A DELETE eltávolítja az adatokat
  • adathozzáférés-definíciós operátorok (Data Control Language, DCL ):

    • A GRANT engedélyeket ad egy felhasználónak (csoportnak) bizonyos műveletek végrehajtására egy objektumon
    • A REVOKE visszavonja a korábban kiadott engedélyeket
    • A DENY olyan tilalmat határoz meg, amely elsőbbséget élvez az engedéllyel szemben
  • Tranzakcióvezérlő nyelv ( TCL ) nyilatkozatok :

    • A COMMIT tranzakciót alkalmaz
    • A ROLLBACK visszaállítja az aktuális tranzakcióval összefüggésben végrehajtott összes módosítást
    • A SAVEPOINT a tranzakciót kisebb részekre osztja

Az első két szinten pedig csak a SELECT utasítás fajtáit tanulmányoztuk. Képzeld el, mennyi érdekes dolog vár ránk a jövőben.

De itt elsősorban a Java programozókra készülünk, ezért azokat a forgatókönyveket fogjuk tanulmányozni, amelyekkel biztosan találkozni fog a munka során.

A projekt rendszergazdája nagy valószínűséggel létrehozza az összes adatbázist, de biztosan sokszor magának kell kiválasztania az adatokból.

Sőt, előfordulhat, hogy a kódja nem írja be az összes adatot az adatbázisba, vagy rosszul írja be, ezért gyakran tollakkal kell belemásznia, és meg kell néznie, hogy valójában mi van ott.

Nézzük át újra azokat a dolgokat, amelyeket az előző előadásokon érintettünk.

Séma létrehozása adatbázisban

Új séma létrehozásához a DBMS-ben futtassa a parancsot:

CREATE SCHEMA Name;

Ez a legegyszerűbb lehetőség. Új séma létrehozásakor megadhatja az adatkódolási formátumot és egyéb paramétereket is.

Ha törölni szeretné a sémát, de nem biztos benne, hogy létezik-e, akkor futtassa a parancsot:

DROP SCHEMA IF EXIST Name;

Gyakran látni fogja ezeket a parancsokat a különböző adatbázisok biztonsági másolatait tartalmazó fájlokban, ezért hozom ide őket.

Az aktuális séma kiválasztása

Ha sok séma van a DBMS-ben, akkor könnyen előfordulhat, hogy a különböző sémák ugyanazokat a táblákat tartalmazzák. A félreértések elkerülése érdekében két dolgot tehet:

  • Mindig tegye a séma nevét a tábla neve elé
  • Adja meg az alapértelmezett sémát

Írjunk egy lekérdezést, amely kiválasztja az adatokat a felhasználói táblából , amely a tesztsémában található . Valahogy így fog kinézni:

SELECT * FROM test.user;

Ez egyszerűen nélkülözhetetlen, ha egy lekérdezésben több különböző sémából származó táblát kell egyesíteni (JOIN).

A Java nyelvben egyébként gyakran csinálunk hasonlót: ha a kódban különböző csomagokból származó azonos nevű osztályokat kell használnunk, akkor az osztálynév elé adjuk hozzá a csomag nevét.

A második módszer az alapértelmezett séma megadása . Ha a lekérdezés megad egy táblanevet, de nem ad meg sémát, akkor a rendszer az alapértelmezett sémát használja. Ehhez használja a USE utasítást :

USE name - schemes;

Írjuk át az előző lekérdezést a USE utasítással:

USE test;
SELECT * FROM user;

Nézet létrehozása

A valós adatokat tartalmazó táblákon kívül az SQL lehetővé teszi valami virtuális táblák tárolását is, ahol az adatok valós táblákból származnak. Az ilyen virtuális táblákat VIEW-nek nevezzük.

Egy ilyen tábla nem tud valós adatokat tárolni, és minden alkalommal, amikor hozzáfér, valós táblákból húz adatokat. Egy ilyen VIEW tartalma egy SQL lekérdezéssel adható meg.

Létrehozhat egy VIEW-t bármely SELECT lekérdezésből a következő paranccsal:

CREATE VIEW Name AS
SELECT-request;
Írjunk egy lekérdezést, amely az alkalmazotti tábla alapján létrehoz egy public_employee virtuális táblát, ahol elrejtik az alkalmazottak fizetésére vonatkozó információkat:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

A fenti példában a public_employee táblánk (NÉZET) csak az alkalmazottak azonosítóit és nevét tartalmazza, fizetésükkel kapcsolatos információkat nem. Az ilyen Nézeteket ugyanazon a helyen használhatja, mint a valódi táblázatokat.

Miért van szükség a nézetekre? Számos előnnyel rendelkeznek:

Az információhoz való hozzáférés rugalmas szabályozása . Bizonyos felhasználóknak csak a VIEW-hez adhat hozzáférést, de a táblákhoz nem. A Nézetben pedig csak nyilvános információkat vegyen ki a táblázatokból. Ráadásul, ha a jövőben fontos információkat tartalmazó új oszlopok kerülnek a táblákba, az nem véletlenül kerül be a Nézetbe.

Adatok denormalizálása . A tárolás kényelme érdekében az adatokat gyakran több száz és ezer táblára osztják, de egy hétköznapi ember számára nem túl kényelmes ilyen adatokkal dolgozni - túl bonyolult lekérdezéseket kell írnia. A View segítségével virtuális táblákat hozhat létre, amelyek több tucat különböző tábla adatait jelenítik meg egyetlen táblában.

Polimorfizmus és tokozás . Megváltoztathatja az adatbázis struktúráját. Ugyanakkor a program felhasználói, akik az Ön Views-jával dolgoznak, nem sejtik, hogy valami megváltozott. És nem kell átírni a View-hoz hozzáféréssel rendelkező programok kódját. Csak módosítania kell a VIEW-hez kapcsolódó SQL-szkriptet.

Csak olvasható . A nézet csak SELECT lekérdezéssel állítható be, így a View funkcióval végzett munka semmilyen módon nem módosíthatja a valós táblák adatait. Mellesleg, ez egy újabb plusz a lekérdezések gyorsítótárazásának javára. De erről majd legközelebb.