Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tworzenie i używanie procedur składowanych MySQL — samouczek

Procedury składowane to zdefiniowane przez użytkownika instrukcje SQL, które są przechowywane w bazie danych MySQL i wykonywane na żądanie w celu wykonania określonej operacji na bazie danych. Te predefiniowane podprogramy pomagają w przeniesieniu logiki biznesowej do bazy danych, co ma kilka zalet:

  • Podróże w obie strony wykonane do serwera bazy danych przez aplikację są zminimalizowane.
  • Możliwość utrzymania kodu jest ulepszona, ponieważ różne aplikacje mogą współdzielić procedurę składowaną.
  • Wydajność bazy danych uległa poprawie, ponieważ procedury składowane są kompilowane raz i wykonywane bardzo szybko i wydajnie.

W tym przewodniku:

  • Poznaj składnię tworzenia procedur składowanych i zadeklaruj swoją pierwszą procedurę.

  • Wykonaj przykładową procedurę po jej zadeklarowaniu.

  • Dowiedz się, jak usunąć procedurę, gdy już jej nie potrzebujesz.

Zanim zaczniesz

Upewnij się, że masz następujące elementy:

  1. Jeśli jeszcze tego nie zrobiłeś, utwórz konto Linode i instancję obliczeniową. Zobacz nasze przewodniki Wprowadzenie do Linode i tworzenie instancji obliczeniowej.

  2. Postępuj zgodnie z naszym przewodnikiem Konfigurowanie i zabezpieczanie instancji Compute, aby zaktualizować system. Możesz także ustawić strefę czasową, skonfigurować nazwę hosta, utworzyć ograniczone konto użytkownika i utwardzić dostęp SSH.

  3. Serwer i klient MySQL zainstalowany na serwerze Linode. Instrukcje instalacji MySQL są dostępne dla różnych dystrybucji w naszej sekcji MySQL.

Przygotuj bazę danych

Zaczniesz od utworzenia przykładowej bazy danych, tabeli i użytkownika w celu uzyskania dostępu do bazy danych. Wypełnisz również tabelę przykładowymi danymi do celów testowych.

Tworzenie bazy danych, tabeli i użytkownika

  1. Zaloguj się do serwera MySQL:

     mysql -u root -p
    

    Zostaniesz poproszony o podanie hasła roota Twojej bazy danych MySQL. Następnie naciśnij Enter aby kontynuować.

  2. Następnie zobaczysz monit MySQL podobny do pokazanego poniżej.

    mysql >
  3. Wpisz poniższe polecenie, aby utworzyć test_db baza danych:

    CREATE DATABASE test_db;
    

    Wyjście:

    Query OK, 1 row affected (0.01 sec)
  4. Utwórz użytkownika bazy danych i przyznaj pełny dostęp do test_db Baza danych. Zastąp PASSWORD o złożonej i unikalnej wartości, która jest zgodna z wytycznymi dotyczącymi haseł MySQL:

    CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';
    

    Wyjście:

    Query OK, 1 row affected (0.01 sec)
  5. Przyznaj test_user pełne uprawnienia do test_db baza danych;

    GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
    

    Wyjście:

    Query OK, 1 row affected (0.01 sec)
  6. Uprawnienia do spłukiwania:

    FLUSH PRIVILEGES;
    

    Wyjście:

    Query OK, 0 rows affected (0.01 sec)

Wypełnij bazę danych

  1. Następnie przejdź do bazy danych test_db:

    USE test_db;
    

    Wyjście:

    Database changed
  2. Utwórz products tabela do przechowywania przykładowych rekordów:

    CREATE TABLE products(product_id BIGINT PRIMARY KEY, product_name VARCHAR(50), category_name VARCHAR(50) ) ENGINE=INNODB;
    

    Wyjście:

    Query OK, 0 rows affected (0.01 sec)
  3. Możesz teraz dodać kilka produktów do tabeli produktów, wykonując kolejno poniższe polecenia:

    INSERT INTO products (product_id, product_name, category_name) VALUES ('1', 'GAMING KEYBOARD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('2', 'OPTICAL MOUSE', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('3', 'MOUSE PAD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('4', 'STEREO SYSTEM', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('5', '32 INCH TV', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('6', 'DVB-T2 RECEIVER', 'ELECTRONICS');
    

    Powinieneś otrzymać poniższe dane wyjściowe po wykonaniu każdego Insert oświadczenie:

    Query OK, 1 row affected (0.00 sec)
  4. Następny. potwierdź, czy przykładowe produkty zostały pomyślnie wstawione do bazy danych, uruchamiając Select polecenie poniżej:

    SELECT * FROM products;
    

    Przykładowe produkty powinny być wymienione poniżej:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    |          4 | STEREO SYSTEM   | ELECTRONICS          |
    |          5 | 32 INCH TV      | ELECTRONICS          |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS          |
    +------------+-----------------+----------------------+
    6 rows in set (0.00 sec)
  5. Wyjdź z serwera MySQL.

    QUIT;
    

    Wyjście:

    Bye!
  6. Po utworzeniu test_db baza danych, products tabela, test_user i dodano kilka przykładowych produktów, możesz teraz przejść do tworzenia pierwszej procedury składowanej.

Tworzenie procedury przechowywanej

Składnia procedury przechowywanej

Podstawowa składnia tworzenia procedury składowanej w bazie danych MySQL jest pokazana poniżej:

DELIMITER &&
CREATE PROCEDURE PROCEDURE_NAME (PARAMETER_1, PARAMETER_2, PARAMETER_N...)
BEGIN
[SQL STATEMENT]
END &&
DELIMITER ;
  • DELIMITER && wiersz na początku mówi serwerowi MySQL, aby traktował następujące instrukcje SQL jako pojedyncze instrukcje, zamiast wykonywać je pojedynczo. Kolejny && znajduje się w następnym wierszu, aby zaznaczyć koniec tego oświadczenia.

  • PROCEDURE_NAME to miejsce, w którym zadeklarowana jest nazwa procedury składowanej.

  • Po nazwie procedury następuje zestaw nawiasów, które zawierają parametry procedury. Procedury składowane obsługują parametry oddzielone przecinkami, a ta funkcja czyni je bardziej elastycznymi. Więcej informacji znajdziesz w sekcji Parametry.

  • BEGIN...END polecenia zawierają instrukcję SQL, która ma być wykonana przez procedurę składowaną.

  • Na koniec instrukcja DELIMITER ; jest wystawiany ponownie, aby zmienić ogranicznik z powrotem na domyślną wartość ;

Parametry zapisanej procedury

Każdy parametr procedury ma typ, nazwę i typ danych, oddzielone spacjami:

PARAMETER_TYPE PARAMETER_NAME DATA_TYPE

Na przykład, aby utworzyć parametr typu IN , o nazwie category , z VARCHAR typ danych o długości 50 znaków, użyj tej składni:

IN category VARCHAR(50)

MySQL obsługuje trzy typy parametrów:

  • IN :Wartość parametru musi być określona przez klienta wywołującego. Ta wartość nie może zostać zmieniona przez procedurę składowaną .

    Na przykład, jeśli przekażesz zmienną sesji MySQL jako IN do procedury, a procedura modyfikuje tę wartość w swoich instrukcjach, zmienna sesji pozostanie niezmieniona po zakończeniu procedury.

  • OUT :Ten typ parametru jest również określany przez program wywołujący, ale jego wartość może zostać zmieniona przez procedurę składowaną i pobrana przez program wywołujący.

    Zauważ, że procedura składowana nie może uzyskać dostępu do początkowej wartości zmiennej, która jest przekazywana jako OUT parametr.

  • INOUT :Parametr tego typu łączy zachowania IN i OUT parametry:

    • Procedura składowana może odczytać początkową wartość parametru.

    • Parametr można zmienić podczas wykonywania procedury składowanej.

    • Zmieniona wartość może zostać zwrócona do programu wywołującego, jeśli program wywołujący przekazał zmienną jako parametr.

Przykładowa procedura składowana

Po zrozumieniu podstawowej składni utwórzmy prostą procedurę składowaną do filtrowania produktów według nazwy kategorii. Nazwa kategorii zostanie podana jako IN parametr.

  1. Zaloguj się do serwera MySQL za pomocą test_user poświadczenia , które utworzyłeś podczas przygotowywania bazy danych:

     mysql -u test_user -p
    
  2. Wpisz hasło test_user i naciśnij Enter aby kontynuować.

  3. Otrzymasz mysql > podpowiedź. Kontynuuj, wybierając test_db :

     USE test_db;
    

    Wyjście:

    Database changed.
  4. Następnie wprowadź poniższe polecenia SQL, aby utworzyć filter_by_category procedura składowana:

     DELIMITER &&
     CREATE PROCEDURE filter_by_category (IN category VARCHAR(50))
     BEGIN
     SELECT * FROM products WHERE category_name=category;
     END &&
    

    Wyjście:

    Query OK, 0 rows affected (0.00 sec)
  5. Zmień DELIMITER powrót do ;

    DELIMITER ;
    
  6. Jeśli kod do tworzenia procedury składowanej przebiegł pomyślnie, możesz teraz przejść do wykonywania procedury składowanej.

Wykonywanie procedury przechowywanej

W tym kroku wywołamy procedurę składowaną, którą utworzyliśmy powyżej. Będziemy postępować zgodnie z tą podstawową składnią:

CALL PROCEDURE_NAME (COMMA-SEPARATED PARAMETER VALUES);
  • Aby wykonać filter_by_category procedura składowana, którą stworzyliśmy powyżej, wprowadź poniższe polecenie:

    CALL filter_by_category('COMPUTER ACCESSORIES');
    

    Procedura składowana powinna teraz wyprowadzać wszystkie produkty w COMPUTER ACCESSORIES kategorii, ponieważ określiliśmy COMPUTER ACCESSORIES jako parametr:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    +------------+-----------------+----------------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)
  • Podobnie możesz pobrać listę wszystkich produktów z ELECTRONICS kategorii, wykonując poniższe polecenie.

    CALL filter_by_category('ELECTRONICS') ;
    

    Wyjście:

    +------------+-----------------+---------------+
    | product_id | product_name    | category_name |
    +------------+-----------------+---------------+
    |          4 | STEREO SYSTEM   | ELECTRONICS   |
    |          5 | 32 INCH TV      | ELECTRONICS   |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS   |
    +------------+-----------------+---------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)

Nasza procedura składowana działała zgodnie z oczekiwaniami. Następnie dowiemy się, jak usunąć procedury składowane, jeśli nie chcemy, aby były już ponownie wykonywane.

Usuwanie zapisanych procedur

Możesz usunąć procedurę składowaną MySQL, jeśli nie chcesz jej już używać lub chcesz ją odtworzyć od podstaw. Podstawowa składnia usuwania procedury składowanej jest pokazana poniżej:

DROP PROCEDURE IF EXISTS PROCEDURE_NAME;

Na przykład, aby usunąć nasz filter_by_category procedury składowanej, wykonaj poniższe polecenie MySQL:

DROP PROCEDURE IF EXISTS filter_by_category;

Jeśli procedura składowana istnieje, otrzymasz wynik pokazany poniżej:

Query OK, 0 rows affected (0.00 sec)

To wszystko, jeśli chodzi o tworzenie, używanie i usuwanie procedur składowanych MySQL.

Więcej informacji

Dodatkowe informacje na ten temat można znaleźć w poniższych zasobach. Chociaż są one dostarczane w nadziei, że będą przydatne, należy pamiętać, że nie możemy ręczyć za dokładność ani aktualność materiałów hostowanych zewnętrznie.

  • Praca z procedurami składowanymi MySQL

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między schematem / bazą danych w MySQL

  2. Jak stworzyć widok MySQL

  3. Jak dodać domyślne ograniczenie w MySQL?

  4. NOW() Przykłady – MySQL

  5. Wystąpił błąd JNI, sprawdź instalację i spróbuj ponownie w Eclipse x86 Windows 8.1