SQL er vores alt

Som du sikkert allerede har gættet, kan alle kommandoer til SQL-serveren gives gennem SQL-forespørgsler. Alt.

Disse hold er officielt opdelt i 4 grupper:

  • datadefinitionserklæringer (Data Definition Language, DDL ) :

    • CREATE opretter et databaseobjekt (selve databasen, tabel, visning, bruger og så videre)
    • ALTER ændrer et objekt
    • DROP fjerner et objekt
  • datamanipulationsoperatører (Data Manipulation Language, DML ) :

    • SELECT vælger data, der opfylder givne betingelser
    • INSERT tilføjer nye data
    • OPDATERING ændrer eksisterende data
    • SLET fjerner data
  • dataadgangsdefinitionsoperatører (Data Control Language, DCL ) :

    • GRANT giver en bruger (gruppe) tilladelser til at udføre visse operationer på et objekt
    • REVOKE tilbagekalder tidligere udstedte tilladelser
    • DENY fastsætter et forbud, der har forrang frem for en tilladelse
  • Transaction Control Language ( TCL ) erklæringer :

    • COMMIT anvender en transaktion
    • ROLLBACK ruller tilbage alle ændringer foretaget i forbindelse med den aktuelle transaktion
    • SAVEPOINT opdeler en transaktion i mindre sektioner

Og de første to niveauer studerede vi kun varianter af SELECT-sætningen. Forestil dig, hvor mange interessante ting der venter os i fremtiden.

Men vi forbereder her primært om Java-programmører, så vi vil studere de scenarier, som du helt sikkert vil støde på på arbejdet.

Systemadministratoren på projektet vil højst sandsynligt oprette alle databaserne, men du skal helt sikkert selv foretage et udvalg fra dataene mange gange.

Desuden vil din kode nogle gange ikke skrive alle data til databasen eller skrive den på den forkerte måde, så du bliver ofte nødt til at kravle ind i den med kuglepenne og se, hvad der faktisk er gemt der.

Lad os gennemgå de ting, vi berørte i tidligere forelæsninger igen.

Oprettelse af et skema i en database

For at oprette et nyt skema i DBMS, skal du køre kommandoen:

CREATE SCHEMA Name;

Dette er den nemmeste mulighed. Når du opretter et nyt skema, kan du også angive datakodningsformatet og andre parametre.

Hvis du vil slette skemaet, men du er ikke sikker på, om det eksisterer, skal du køre kommandoen:

DROP SCHEMA IF EXIST Name;

Du vil ofte se disse kommandoer i filer med backup af forskellige databaser, det er derfor, jeg bringer dem her.

Valg af det aktuelle skema

Hvis du har mange skemaer i dit DBMS, så kan det nemt ske, at forskellige skemaer har de samme tabeller. For at undgå forvirring kan du gøre to ting:

  • Sæt altid skemanavnet før tabelnavnet
  • Angiv standardskema

Lad os skrive en forespørgsel, der vil vælge data fra brugertabellen , som er i testskemaet . Det kommer til at se sådan ud:

SELECT * FROM test.user;

Dette er simpelthen uundværligt, hvis du har brug for at forbinde (JOIN) flere tabeller fra forskellige skemaer i én forespørgsel.

Forresten, i Java-sproget gør vi ofte noget lignende: hvis vi i koden skal bruge klasser med samme navn fra forskellige pakker, tilføjer vi pakkenavnet før klassenavnet.

Den anden måde er at angive standardskemaet . Hvis forespørgslen angiver et tabelnavn, men intet skema, bruges standardskemaet. For at gøre dette skal du bruge USE-sætningen :

USE name - schemes;

Lad os omskrive den forrige forespørgsel ved hjælp af USE-sætningen:

USE test;
SELECT * FROM user;

Oprettelse af en visning

Ud over tabeller med rigtige data giver SQL dig mulighed for at gemme noget som virtuelle tabeller, hvor data trækkes fra rigtige tabeller. Sådanne virtuelle tabeller kaldes VIEW.

En sådan tabel kan ikke gemme reelle data, og hver gang den tilgås, trækker den data fra rigtige tabeller. Indholdet af en sådan VIEW specificeres ved hjælp af en SQL-forespørgsel.

Du kan oprette en VIEW fra enhver SELECT-forespørgsel med en kommando som:

CREATE VIEW Name AS
SELECT-request;
Lad os skrive en forespørgsel, der vil skabe en public_employee virtuel tabel baseret på medarbejdertabellen, hvor medarbejderens lønoplysninger vil blive skjult:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

I ovenstående eksempel vil vores tabel (VIEW) public_employee kun indeholde medarbejder-id'er og deres navne, men ikke oplysninger om deres løn. Du kan bruge sådanne visninger på samme sted som rigtige borde.

Hvorfor er der behov for visninger? De har en række fordele:

Fleksibel kontrol med adgang til information . Du kan kun give visse brugere adgang til VIEW, men ikke til at give adgang til tabeller. Og i View, fjern kun offentlige oplysninger fra tabeller. Derudover, hvis nye kolonner med vigtig information tilføjes til tabellerne i fremtiden, vil de ikke ved et uheld komme ind i visningen.

Data denormalisering . For nemheds skyld er data ofte opdelt i hundreder og tusinder af tabeller, men det er ikke særlig bekvemt for en almindelig person at arbejde med sådanne data - du skal skrive for komplekse forespørgsler. Med View kan du oprette virtuelle tabeller, der viser data fra snesevis af forskellige tabeller i en enkelt tabel.

Polymorfi og indkapsling . Du kan ændre strukturerne i din database. Samtidig vil brugere af programmet, der arbejder med dine Views, ikke gætte på, at noget har ændret sig. Og der vil ikke være behov for at omskrive koden for programmer, der har adgang til View. Du skal blot justere SQL-scriptet, der er relateret til VIEW.

Kun læse . View kan kun indstilles med en SELECT-forespørgsel, så arbejdet med View kan ikke ændre dataene i rigtige tabeller på nogen måde. Forresten er dette endnu et plus til fordel for forespørgselscache. Men mere om det næste gang.