sql >> Databasteknik >  >> RDS >> Mysql

Hur man använder vyer i en MySQL-databas

En vy i MySQL är en namngiven fråga som kan triggas för att visa data lagrad i andra tabeller. Med andra ord är vyer användardefinierade virtuella tabeller. Visningar kan användas för att:

  • Förbättra databassäkerheten. Om din databas innehåller känslig information som behöver säkras, hjälper en vy dig att isolera data. En vy kan skapas med en fördefinierad resultatuppsättning, och du kan ge användare åtkomst endast till den vyn, istället för tabellen som innehåller känslig information.
  • Flytta komplex affärslogik till databasservern. Istället för att koda ofta använd mjukvarulogik i olika klienter, kan en utvecklare flytta logiken till databasnivån med hjälp av en vy. Till exempel kan en vy skapas för att visa kundklassificeringar beroende på deras totala försäljning.
  • Minska datadistraktion. En vy kan kombinera resultat från olika tabeller och endast visa relevanta kolumner när den anropas.

I den här guiden kommer du att lära dig:

  • Hur syntaxen för en MySQL-vy är uppbyggd.
  • Hur man skapar en MySQL-vy.
  • Hur man anropar en MySQL-vy.
  • Hur man släpper en vy i MySQL.

Innan du börjar

För att följa med i den här guiden, se till att du har följande:

  1. En Linode, som du kör MySQL-mjukvaran på. Du kan följa guiden Komma igång med Linode för att tillhandahålla en Linode.

  2. MySQL-servermjukvaran (eller MariaDB) installerad på din Linode. Se avsnittet MySQL, som innehåller guider som beskriver hur du installerar MySQL på flera Linux-distributioner.

Förbereder databasen

Innan du skapar dina MySQL-vyer, skapa en exempeldatabas, definiera några tabeller och fyll i dem med lite data först:

  1. SSH till din Linode. Ange sedan detta kommando för att logga in på MySQL som root-användare:

    mysql -u root -p
    

    När du uppmanas, ange root-lösenordet för din MySQL-server och tryck på Retur för att fortsätta.

    Obs

    Om ditt lösenord inte accepteras kan du behöva köra det föregående kommandot med sudo :

    sudo mysql -u root -p
    
  2. Om ditt lösenord accepteras bör du se MySQL-prompten:

    
    mysql >
    
    Obs

    Om du använder MariaDB kan du se en prompt som följande istället:

    
    MariaDB [(none)]>
    
  3. Kör sedan det här SQL-kommandot för att skapa en exempeldatabas som heter sample_database :

    CREATE DATABASE sample_database;
    

    Du bör se denna utdata, som bekräftar att databasen skapades framgångsrikt:

    
    Query OK, 1 row affected (0.02 sec)
    
  4. Välj sample_database databas:

    USE sample_database;
    

    Du bör se denna utdata:

    
    Database changed
    
  5. Kör det här kommandot för att skapa en customers tabell:

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

    Du bör se denna utdata:

    
    Query OK, 0 rows affected (0.07 sec)
    
  6. Fyll sedan i customers tabell med tre poster. Kör nedanstående INSERT kommandon ett efter ett:

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

    Utdata nedan visas efter att varje post har infogats:

    
    Query OK, 1 row affected (0.08 sec)
    ...
    
  7. Se till att exempelposterna infogades i databasen genom att köra denna SELECT kommando:

    SELECT * FROM customers;
    

    Denna utdata visas, vilket bekräftar att data infogades framgångsrikt i föregående steg:

    
    +-------------+---------------+
    | customer_id | customer_name |
    +-------------+---------------+
    |           1 | Leslie        |
    |           2 | Andy          |
    |           3 | Ben           |
    +-------------+---------------+
    3 rows in set (0.01 sec)
    
  8. Skapa sedan en sales tabell. Kör detta kommando:

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

    Denna utdata visas:

    
    Query OK, 0 rows affected (0.07 sec)
    
  9. Lägg sedan till lite data till sales tabell. Kör dessa kommandon ett efter ett:

    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 att ha infogat varje försäljningspost visas denna utdata:

    
    Query OK, 1 row affected (0.01 sec)
    ...
    
  10. Kör sedan en SELECT fråga för att verifiera att försäljningsdata har infogats i tabellen:

    SELECT * FROM sales;
    

    Denna utdata visas, vilket bekräftar att försäljningsdata infogades framgångsrikt i föregående steg:

    
    
    
    
    +-------------+---------------+
    | customer_id | monthly_sales |
    +-------------+---------------+
    |           1 |        500.27 |
    |           2 |       7600.32 |
    |           3 |      25879.63 |
    +-------------+---------------+
    3 rows in set (0.00 sec)
    

Du har definierat databasen och tabellerna att arbeta med. Nästa avsnitt beskriver syntaxen för en MySQL-vy.

MySQL View-syntaxen

Detta är en förenklad version av MySQL-vyns syntax:

    CREATE
    VIEW view_name
    AS select_statement
  • view_name :Namnet på MySQL-vyn måste definieras här. Det är lämpligt att använda ett beskrivande namn så att du kan komma ihåg vyns funktion senare.

  • select_statement :Detta är SQL-frågan som är kopplad till den definierade vyn. När vyn anropas kör MySQL den här frågan för att returnera en postuppsättning.

Skapa en MySQL-vy

Det här avsnittet presenterar ett exempel på MySQL-vy. Den här vyn används för att klassificera kunder från din exempeldatabas, beroende på deras antal månatliga försäljningar.

Se till att du är inloggad på din MySQL-server. Kör sedan kommandot nedan för att skapa ett customers_membership visa:

CREATE
VIEW customers_membership
AS SELECT sales.customer_id,
customer_name,
(IF(sales.monthly_sales >= 5000, 'PREMIUM', 'BASIC')) as membership
FROM sales
LEFT JOIN customers
ON sales.customer_id = customers.customer_id;

Om vyn skapas framgångsrikt bör du se utdata som visas nedan:


Query OK, 0 rows affected (0.01 sec)

Ovanstående MySQL-kommando skapar en vy som heter customers_membership som ansluter sig till customers och sales tabell med PRIMARY KEY customer_id . Den logiska IF(expression, value_if_true, value_if_false) uttalande logik används för att bestämma medlemskapet för kunden från deras månatliga försäljning:

  • Om en kunds försäljning är lika med eller över 5 000 klassificerar vyn kunden som en PREMIUM medlem.

  • Annars (om försäljningen är under 5,000 ), klassificeras kunden som en BASIC medlem.

customers_membership vyn sparas nu i databasen. Nästa avsnitt visar hur man anropar en MySQL-vy och visar en postuppsättning utan att fråga direkt i bastabellerna.

Anropar en MySQL-vy

Det här avsnittet visar hur du anropar MySQL-vyn du skapade ovan och bekräftar att den fungerar som förväntat. När en vy väl har skapats är den synlig som ett databasobjekt och den kan anropas med SELECT uttalande.

  1. För att anropa customers_membership visa, kör:

    SELECT * FROM customers_membership;
    

    Om vyn fungerar som förväntat bör du nu se en lista över kunder med deras genererade membership värden baserat på deras försäljning. Sedan Leslie försäljningen var under 5000 (500,27), vyn visar kundens medlemskap som BASIC . Andy och Ben försäljningen var 7600,32 respektive 25879,63 och detta gör dem till PREMIUM medlemmar:

    
    +-------------+---------------+------------+
    | customer_id | customer_name | membership |
    +-------------+---------------+------------+
    |           1 | Leslie        | BASIC      |
    |           2 | Andy          | PREMIUM    |
    |           3 | Ben           | PREMIUM    |
    +-------------+---------------+------------+
    3 rows in set (0.00 sec)
    
  2. När en bastabellsdata har uppdaterats och du anropar en MySQL-vy igen, bör du se den senaste informationen. Vyer hämtar information från sina bastabeller och de lagrar inte data. För att visa hur en vy hämtar uppdaterad information från bastabellerna, lägg till en annan kund som heter Rajie till customers tabell:

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

    Denna utdata visas:

    
    Query OK, 1 row affected (0.01 sec)
    
  3. Lägg sedan till kundens månatliga försäljningsinformation i försäljningstabellen:

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

    Denna utdata visas:

    
    Query OK, 1 row affected (0.01 sec)
    
  4. Anropa sedan customers_membership visa igen:

    SELECT * FROM customers_membership;
    

    Utdata nedan visas, vilket bekräftar att vyn kan plocka upp ändringar och dra de nya kundernas information som förväntat:

    
    +-------------+---------------+------------+
    | customer_id | customer_name | membership |
    +-------------+---------------+------------+
    |           1 | Leslie        | BASIC      |
    |           2 | Andy          | PREMIUM    |
    |           3 | Ben           | PREMIUM    |
    |           4 | Rajie         | BASIC      |
    +-------------+---------------+------------+
    4 rows in set (0.00 sec)
    

    Som du kan se i vyposten ovan har du nu en ny kund som heter Rajie med en BASIC medlemskap.

Släpp en MySQL-vy

Precis som andra databasobjekt kan du ta bort vyer om du inte längre behöver dem. Detta är den grundläggande syntaxen för att ta bort en MySQL-vy:

    DROP VIEW IF EXISTS view_name;
  1. Innan du släpper en MySQL-vy, identifiera först dess namn genom att köra kommandot nedan:

    SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
    

    En lista över alla vyer i den för närvarande valda databasen visas:

    
    +---------------------------+------------+
    | Tables_in_sample_database | Table_type |
    +---------------------------+------------+
    | customers_membership      | VIEW       |
    +---------------------------+------------+
    1 row in set (0.01 sec)
    
  2. I det här fallet är namnet på vyn som du vill ta bort customers_membership . Så för att ta bort det, kör:

    DROP VIEW IF EXISTS customers_membership;
    

    Se till att utdata nedan visas efter att vyn har tagits bort från databasen:

    
    Query OK, 0 rows affected (0.01 sec)
    
    Obs Observera att om du försöker ta bort en MySQL-vy som inte finns utan att använda IF EXISTS nyckelord, ger MySQL ett fel.
  3. När kommandot från steg 1 körs igen ska det nu inte finnas några resultat:

    SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
    
    
    Empty set (0.000 sec)
    

Mer information

Du kanske vill konsultera följande resurser för ytterligare information om detta ämne. Även om dessa tillhandahålls i hopp om att de kommer att vara användbara, vänligen observera att vi inte kan garantera noggrannheten eller aktualiteten hos externt värdmaterial.

  • MySQL – Använda vyer

  1. Hur man undslipper sträng medan man matchar mönster i PostgreSQL

  2. AMD EPYC 7002-seriens processorer och SQL Server

  3. DAYOFWEEK() Exempel – MySQL

  4. On-Premises vs. SaaS:Databas Monitoring System Architecture