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:
-
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.
-
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:
-
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
-
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)]>
-
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.)
-
Vælg
sample_database
database:BRUG sample_database;
Du bør se dette output:
Database ændret
-
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.)
-
Udfyld derefter
kunderne
tabel med tre poster. Kør nedenståendeINSERT
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.)...
-
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.)
-
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.)
-
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.)...
-
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 enBASIC
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.
-
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. SidenLeslie
salget var under 5000 (500,27), visningen viser kundens medlemskab somBASIC
.Andy
ogBen
salget var henholdsvis 7600,32 og 25879,63, og det gør dem tilPREMIUM
medlemmer:+-------------+------------------+ | kunde_id | kundenavn | medlemskab |+-------------+--------------+-------------+| 1 | Leslie | BASIC || 2 | Andy | PREMIUM || 3 | Ben | PREMIUM |+-------------------------------------+3 rækker i sæt (0,00 sek.)
-
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
tilkunderne
tabel:INSERT INTO customers (customer_name) VALUES ('Rajie');
Dette output vises:
Forespørgsel OK, 1 række påvirket (0,01 sek.)
-
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.)
-
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 enBASIC
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;
-
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.)
-
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. -
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