sql >> Database teknologi >  >> RDS >> Mysql

Sådan bruger du visninger i en MySQL-database

En visning i MySQL er en navngivet forespørgsel, der kan udløses til at vise data gemt i andre tabeller. Med andre ord er visninger brugerdefinerede virtuelle tabeller. Visninger kan bruges til at:

  • Forbedre databasesikkerheden. Hvis din database indeholder følsomme oplysninger, der skal sikres, hjælper brugen af ​​en visning dig med at isolere dataene. En visning kan oprettes med et foruddefineret resultatsæt, og du kan kun give brugere adgang til den visning i stedet for tabellen, der indeholder følsomme oplysninger.
  • Flyt kompleks forretningslogik til databaseserveren. I stedet for at kode ofte brugt softwarelogik i forskellige klienter, kan en udvikler flytte logikken til databaseniveauet ved hjælp af en visning. For eksempel kan der oprettes en visning for at vise kundeklassifikationer afhængigt af deres samlede salg.
  • Reducer datadistraktion. En visning kan kombinere resultater fra forskellige tabeller og kun vise de relevante kolonner, når den aktiveres.

I denne guide lærer du:

  • Sådan er syntaksen for en MySQL-visning opbygget.
  • Sådan opretter man en MySQL-visning.
  • Sådan kalder man en MySQL-visning.
  • Sådan droppes en visning i MySQL.

Før du begynder

For at følge denne vejledning skal du sørge for at have følgende:

  1. En Linode, som du kører MySQL-softwaren på. Du kan følge vejledningen Kom godt i gang med Linode for at klargøre en Linode.

  2. MySQL-serversoftwaren (eller MariaDB) installeret på din Linode. Se venligst MySQL-sektionen, som indeholder vejledninger, der beskriver, hvordan du installerer MySQL på flere Linux-distributioner.

Forberedelse af databasen

Før du opretter dine MySQL-visninger, skal du oprette en eksempeldatabase, definere et par tabeller og først udfylde dem med nogle data:

  1. SSH til din Linode. Indtast derefter denne kommando for at logge på MySQL som root-bruger:

    mysql -u root -p 

    Når du bliver bedt om det, skal du indtaste root-adgangskoden til din MySQL-server og trykke på Enter for at fortsætte.

    Bemærk

    Hvis din adgangskode ikke accepteres, skal du muligvis køre den forrige kommando med sudo :

    sudo mysql -u root -p 
  2. Hvis din adgangskode accepteres, bør du se MySQL-prompten:

    mysql> 
    Bemærk

    Hvis du bruger MariaDB, kan du i stedet se en prompt som følgende:

    MariaDB [(ingen)]> 
  3. Kør derefter denne SQL-kommando for at oprette en eksempeldatabase, der hedder sample_database :

    CREATE DATABASE sample_database; 

    Du bør se dette output, som bekræfter, at databasen blev oprettet:

    Forespørgsel OK, 1 række påvirket (0,02 sek.) 
  4. Vælg sample_database database:

    BRUG sample_database; 

    Du bør se dette output:

    Database ændret 
  5. Kør denne kommando for at oprette en kunder tabel:

     CREATE TABLE-kunder ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE =InnoDB; 

    Du bør se dette output:

    Forespørgsel OK, 0 rækker påvirket (0,07 sek.) 
  6. Udfyld derefter kunderne tabel med tre poster. Kør nedenstående INSERT kommandoer én efter én:

    INSERT INTO customers (customer_name) VALUES ('Leslie');INSERT INTO customers (customer_name) VALUES ('Andy');INSERT INTO customers (customer_name) VALUES ('Ben'); 

    Outputtet nedenfor vises efter hver post er indsat:

    Forespørgsel OK, 1 række påvirket (0,08 sek.)... 
  7. Sørg for, at prøveposterne blev indsat i databasen ved at køre denne SELECT kommando:

    VÆLG * FRA kunder; 

    Dette output vises, som bekræfter, at dataene blev indsat korrekt i det forrige trin:

    +-------------+--------------+| kunde_id | kundenavn |+-------------+---------------+| 1 | Leslie || 2 | Andy || 3 | Ben |+-------------+---------------+3 rækker i sæt (0,01 sek.)
  8. Opret derefter en salg bord. Kør denne kommando:

     CREATE TABLE sales ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, monthly_sales DECIMAL(17,2) ) ENGINE =InnoDB; 

    Dette output vises:

    Forespørgsel OK, 0 rækker påvirket (0,07 sek.) 
  9. Tilføj derefter nogle data til salg bord. Kør disse kommandoer én efter én:

    INSERT INTO sales (customer_id, monthly_sales) VALUES ('1','500.27');INSERT INTO sales (customer_id, monthly_sales) VALUES ('2','7600.32');INSERT INTO sales (customer_id, monthly_sales) VALUES ('3', '25879.63'); 

    Efter indsættelse af hver salgspost vises dette output:

    Forespørgsel OK, 1 række påvirket (0,01 sek.)... 
  10. Kør derefter en SELECT forespørgsel for at bekræfte, at salgsdataene blev indsat i tabellen:

    VÆLG * FRA salg; 

    Dette output vises, som bekræfter, at salgsdataene blev indsat med succes i det forrige trin:

    +--------------+--------------+| kunde_id | månedligt_salg |+-------------+------------+| 1 | 500,27 || 2 | 7600,32 || 3 | 25879.63 |+-------------+------------+3 rækker i sæt (0,00 sek.) 

Du har defineret databasen og tabellerne, der skal arbejdes på. Det næste afsnit beskriver syntaksen for en MySQL-visning.

MySQL View-syntaksen

Dette er en forenklet version af MySQL-visningssyntaksen:

 CREATE VIEW view_name AS select_statement 
  • visningsnavn :Navnet på MySQL-visningen skal defineres her. Det er tilrådeligt at bruge et beskrivende navn, så du senere kan huske visningens funktion.

  • select_statement :Dette er SQL-forespørgslen, der er koblet sammen med den definerede visning. Når visningen startes, kører MySQL denne forespørgsel for at returnere et rekordsæt.

Oprettelse af en MySQL-visning

Dette afsnit præsenterer et eksempel på MySQL-visning. Denne visning bruges til at klassificere kunder fra din prøvedatabase afhængigt af deres antal månedlige salg.

Sørg for, at du er logget ind på din MySQL-server. Kør derefter kommandoen nedenfor for at oprette et customers_membership se:

CREATEVIEW customers_membershipAS SELECT sales.customer_id,customer_name,(IF(sales.monthly_sales>=5000, 'PREMIUM', 'BASIC')) som medlemskabFRA salgLEFT JOIN customersON sales.customer_id =customers.customer_id; 

Hvis visningen er oprettet med succes, bør du se outputtet vist nedenfor:

Forespørgsel OK, 0 rækker påvirket (0,01 sek.) 

Ovenstående MySQL-kommando opretter en visning med navnet customers_membership der slutter sig til kunderne og salg tabel med PRIMARY KEY customer_id . Den logiske IF(udtryk, værdi_hvis_sand, værdi_hvis_falsk) erklæringslogik bruges til at bestemme kundens medlemskab ud fra deres månedlige salg:

  • Hvis en kundes salg er lig med eller over 5.000, klassificerer visningen kunden som en PREMIUM medlem.

  • Ellers (hvis salget er under 5.000). ), er kunden klassificeret som en BASIC medlem.

customers_membership visningen er nu gemt i databasen. Det næste afsnit viser, hvordan man kalder en MySQL-visning og viser et rekordsæt uden at forespørge direkte i basistabellerne.

Ankaldelse af en MySQL-visning

Dette afsnit viser, hvordan du aktiverer den MySQL-visning, du oprettede ovenfor, og bekræfter, at den fungerer som forventet. Når en visning er oprettet, er den synlig som et databaseobjekt, og den kan kaldes ved hjælp af SELECT erklæring.

  1. For at påkalde customers_membership se, kør:

    SELECT * FROM customers_membership; 

    Hvis visningen fungerer som forventet, bør du nu se en liste over kunder med deres genererede medlemskab værdier baseret på deres salg. Siden Leslie salget var under 5000 (500,27), visningen viser kundens medlemskab som BASIC . Andy og Ben salget var henholdsvis 7600,32 og 25879,63, og det gør dem til PREMIUM medlemmer:

    +-------------+------------------+ | kunde_id | kundenavn | medlemskab |+-------------+--------------+-------------+| 1 | Leslie | BASIC || 2 | Andy | PREMIUM || 3 | Ben | PREMIUM |+-------------------------------------+3 rækker i sæt (0,00 sek.)
  2. Når en basistabeldata er opdateret, og du kalder en MySQL-visning igen, bør du se de seneste oplysninger. Visninger trækker oplysninger fra deres basistabeller, og de gemmer ikke dataene. For at demonstrere, hvordan en visning trækker opdateret information fra basistabellerne, skal du tilføje en anden kunde ved navn Rajie til kunderne tabel:

    INSERT INTO customers (customer_name) VALUES ('Rajie'); 

    Dette output vises:

    Forespørgsel OK, 1 række påvirket (0,01 sek.) 
  3. Tilføj derefter kundens månedlige salgsoplysninger til salgstabellen:

    INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41'); 

    Dette output vises:

    Forespørgsel OK, 1 række påvirket (0,01 sek.) 
  4. Næste, påkald customers_membership se igen:

    SELECT * FROM customers_membership; 

    Outputtet nedenfor vises, hvilket bekræfter, at visningen er i stand til at afhente ændringer og trække de nye kunders oplysninger som forventet:

    +-------------+------------------+ | kunde_id | kundenavn | medlemskab |+-------------+--------------+-------------+| 1 | Leslie | BASIC || 2 | Andy | PREMIUM || 3 | Ben | PREMIUM || 4 | Rajie | BASIC |+-------------+---------------+------------+4 rækker i sæt (0,00 sek.)

    Som du kan se i visningspostsættet ovenfor, har du nu en ny kunde ved navn Rajie med en BASIC medlemskab.

Slip en MySQL-visning

Ligesom andre databaseobjekter kan du slette visninger, hvis du ikke længere har brug for dem. Dette er den grundlæggende syntaks til at droppe en MySQL-visning:

 SLIP VISNING HVIS FINDER view_name; 
  1. Før du dropper en MySQL-visning, skal du først identificere dens navn ved at køre kommandoen nedenfor:

    VIS HELE TABELLER HVOR TABLE_TYPE SOM "VIEW"; 

    En liste over alle visninger i den aktuelt valgte database vises:

    +----------------------------+-----------+| Tabeller_i_prøvedatabase | Tabeltype |+----------------------------+------------+| kunder_medlemskab | SE |+----------------------------+------------+1 række i sæt (0,01 sek.)
  2. I dette tilfælde er navnet på den visning, du vil slette, customers_membership . Så for at slette det, kør:

    DROP VISNING HVIS FINDER customer_membership; 

    Sørg for, at outputtet nedenfor vises, efter at visningen er slettet fra databasen:

    Forespørgsel OK, 0 rækker påvirket (0,01 sek.) 
    Bemærk Bemærk venligst, hvis du forsøger at slette en MySQL-visning, der ikke eksisterer uden at bruge IF EXISTS søgeord, giver MySQL en fejl.
  3. Når kommandoen fra trin 1 køres igen, skulle der nu ikke være nogen resultater:

    VIS HELE TABELLER HVOR TABLE_TYPE SOM "VIS"; 
    Tømt sæt (0,000 sek.) 

Flere oplysninger

Du ønsker måske at konsultere følgende ressourcer for yderligere oplysninger om dette emne. Selvom disse leveres i håb om, at de vil være nyttige, bemærk venligst, at vi ikke kan stå inde for nøjagtigheden eller aktualiteten af ​​eksternt hostede materialer.

  • MySQL - Brug af visninger

  1. Understøtter SQLDeveloper eksekvering af scripts?

  2. MySQL Tutorial:MySQL IN-klausul (Grundlæggende)

  3. Sådan konverteres decimal til hexadecimal ved hjælp af TO_CHAR() i Oracle

  4. Indsæt i fra CTE