Mysql
 sql >> база данни >  >> RDS >> Mysql

Създаване и използване на MySQL Съхранени процедури - Урок

Съхранените процедури са дефинирани от потребителя SQL изрази, които се съхраняват в MySQL база данни и се изпълняват при поискване за извършване на конкретна операция с база данни. Тези предварително дефинирани подпрограми помагат при преместването на бизнес логиката в базата данни, което предлага няколко предимства:

  • Обиколните пътувания, направени до сървъра на базата данни от приложение, са сведени до минимум.
  • Поддържаемостта на кода е подобрена, тъй като различни приложения могат да споделят съхранената процедура.
  • Ефективността на базата данни е подобрена, тъй като съхранените процедури се компилират веднъж и се изпълняват много бързо и ефективно.

В това ръководство ще:

  • Научете синтаксиса за създаване на съхранени процедури и декларирайте първата си процедура.

  • Изпълнете примерната процедура, след като сте я декларирали.

  • Научете как да изтриете процедура, когато вече не се нуждаете от нея.

Преди да започнете

Уверете се, че имате следното:

  1. Ако все още не сте го направили, създайте акаунт в Linode и Compute Instance. Вижте нашите ръководства Първи стъпки с Linode и Създаване на изчислителен екземпляр.

  2. Следвайте нашето ръководство за настройка и осигуряване на изчислителен екземпляр, за да актуализирате вашата система. Може също да пожелаете да зададете часовата зона, да конфигурирате името на хоста си, да създадете ограничен потребителски акаунт и да укрепите SSH достъпа.

  3. MySQL сървър и клиент, инсталирани на сървъра на Linode. Ръководствата за инсталиране на MySQL са налични за различни дистрибуции в нашия раздел MySQL.

Подгответе базата данни

Ще започнете със създаване на примерна база данни, таблица и потребител за достъп до базата данни. Освен това ще попълните таблицата с примерни данни за тестови цели.

Създаване на базата данни, таблицата и потребителя

  1. Влезте в MySQL сървъра:

     mysql -u root -p
    

    Ще бъдете подканени да въведете root паролата на вашата MySQL база данни. След това натиснете Enter за да продължите.

  2. След това ще видите подкана за MySQL, подобна на показаната по-долу.

    mysql >
  3. Въведете командата по-долу, за да създадете test_db база данни:

    CREATE DATABASE test_db;
    

    Изход:

    Query OK, 1 row affected (0.01 sec)
  4. Създайте потребител на база данни и дайте пълен достъп до test_db база данни. Заменете PASSWORD със сложна и уникална стойност, която следва указанията за MySQL пароли:

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

    Изход:

    Query OK, 1 row affected (0.01 sec)
  5. Предоставете test_user пълни привилегии за test_db база данни;

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

    Изход:

    Query OK, 1 row affected (0.01 sec)
  6. Привилегии за изтриване:

    FLUSH PRIVILEGES;
    

    Изход:

    Query OK, 0 rows affected (0.01 sec)

Попълване на базата данни

  1. След това превключете към базата данни test_db:

    USE test_db;
    

    Изход:

    Database changed
  2. Създайте products таблица за съхраняване на примерни записи:

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

    Изход:

    Query OK, 0 rows affected (0.01 sec)
  3. Вече можете да добавите няколко продукта към таблицата с продукти, като изпълните командите по-долу един по един:

    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');
    

    Трябва да получите следния изход след изпълнение на всяко Insert изявление:

    Query OK, 1 row affected (0.00 sec)
  4. Следващия. потвърдете дали примерните продукти са били вмъкнати успешно в базата данни, като изпълните Select команда по-долу:

    SELECT * FROM products;
    

    Вашите примерни продукти трябва да са изброени, както е показано по-долу:

    +------------+-----------------+----------------------+
    | 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. Излезте от MySQL сървъра.

    QUIT;
    

    Изход:

    Bye!
  6. След като създадете test_db база данни, products таблица, test_user и добавих някои примерни продукти, сега можете да преминете към създаване на първата съхранена процедура.

Създаване на съхранена процедура

Синтаксис на запаметената процедура

Основният синтаксис на създаване на съхранена процедура в MySQL база данни е показан по-долу:

DELIMITER &&
CREATE PROCEDURE PROCEDURE_NAME (PARAMETER_1, PARAMETER_2, PARAMETER_N...)
BEGIN
[SQL STATEMENT]
END &&
DELIMITER ;
  • DELIMITER && ред в началото казва на MySQL сървъра да третира следните SQL изрази като единичен израз, вместо да ги изпълнява поотделно. Друг && е включен на по-късен ред, за да отбележи края на това изявление.

  • PROCEDURE_NAME е мястото, където се декларира името на вашата съхранена процедура.

  • Името на процедурата е последвано от набор от скоби, които обхващат параметрите на вашата процедура. Съхранените процедури поддържат параметри, разделени със запетая, и тази функция ги прави по-гъвкави. Вижте раздела с параметри за повече подробности.

  • BEGIN...END командите обхващат SQL израза, който искате да бъде изпълнен от съхранената процедура.

  • В крайна сметка изразът DELIMITER ; се издава отново, за да промени разделителя обратно към стойността по подразбиране на ;

Параметри на запаметената процедура

Всеки параметър за процедура има тип, име и тип данни, разделени с интервали:

PARAMETER_TYPE PARAMETER_NAME DATA_TYPE

Например, за да създадете параметър от тип IN , с име category , с VARCHAR тип данни с дължина от 50 символи, използвайте този синтаксис:

IN category VARCHAR(50)

MySQL поддържа три типа параметри:

  • IN :Стойността на параметъра трябва да бъде определена от извикващия клиент. Тази стойност не може да бъде променена от съхранената процедура .

    Например, ако предадете променлива на сесията на aMySQL като IN параметър към процедура и процедурата променя тази стойност в своите оператори, вашата променлива на сесията ще остане непроменена след излизане от процедурата.

  • OUT :Този тип параметър също се посочва от извикващата програма, но стойността му може да бъде променена от съхранената процедура и извлечена от извикващата програма.

    Обърнете внимание, че съхранената процедура не може да получи достъп до първоначалната стойност на променлива, която се предава като OUT параметър.

  • INOUT :Параметър от този тип комбинира поведението на IN и OUT параметри:

    • Съхранената процедура може да чете първоначалната стойност на параметъра.

    • Параметърът може да бъде променен по време на изпълнение на съхранената процедура.

    • Променената стойност може да бъде върната обратно към извикващата програма, ако извикващата програма е прехвърлила променлива като параметър.

Примерна съхранена процедура

След като разберем основния синтаксис, нека създадем проста съхранена процедура за филтриране на продукти по име на категория. Името на категорията ще бъде предоставено като IN параметър.

  1. Влезте в MySQL сървъра, като използвате test_user 's идентификационни данни, които сте създали при подготовката на базата данни:

     mysql -u test_user -p
    
  2. Въведете паролата на test_user и натиснете Enter за да продължите.

  3. Ще получите mysql > бърза. Продължете, като изберете test_db :

     USE test_db;
    

    Изход:

    Database changed.
  4. След това въведете SQL командите по-долу, за да създадете filter_by_category съхранена процедура:

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

    Изход:

    Query OK, 0 rows affected (0.00 sec)
  5. Променете DELIMITER обратно към ;

    DELIMITER ;
    
  6. Ако кодът за създаване на съхранената процедура се изпълни успешно, вече можете да преминете към изпълнение на съхранената процедура.

Изпълнение на съхранена процедура

В тази стъпка ще извикаме съхранената процедура, която създадохме по-горе. Ще следваме този основен синтаксис:

CALL PROCEDURE_NAME (COMMA-SEPARATED PARAMETER VALUES);
  • За да изпълните filter_by_category съхранена процедура, която създадохме по-горе, въведете командата по-долу:

    CALL filter_by_category('COMPUTER ACCESSORIES');
    

    Съхранената процедура вече трябва да извежда всички продукти в COMPUTER ACCESSORIES категория, защото сме посочили COMPUTER ACCESSORIES като параметър:

    +------------+-----------------+----------------------+
    | 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)
  • По същия начин можете да извлечете списък с всички продукти от ELECTRONICS категория, като изпълните командата по-долу.

    CALL filter_by_category('ELECTRONICS') ;
    

    Изход:

    +------------+-----------------+---------------+
    | 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)

Нашата съхранена процедура работи, както очаквахме. След това ще научим как да изтрием съхранените процедури, ако вече не искаме те да се изпълняват отново.

Изтриване на съхранени процедури

Можете да изтриете съхранена процедура в MySQL, ако вече не искате да я използвате или ако искате да я пресъздадете от нулата. Основният синтаксис на отпадане на съхранената процедура е показан по-долу:

DROP PROCEDURE IF EXISTS PROCEDURE_NAME;

Например, за да изтриете нашия filter_by_category съхранена процедура, изпълнете командата MySQL по-долу:

DROP PROCEDURE IF EXISTS filter_by_category;

Ако съхранената процедура съществува, ще получите изхода, показан по-долу:

Query OK, 0 rows affected (0.00 sec)

Това е всичко, когато става въпрос за създаване, използване и премахване на MySQL съхранени процедури.

Повече информация

Може да пожелаете да се консултирате със следните ресурси за допълнителна информация по тази тема. Въпреки че те са предоставени с надеждата, че ще бъдат полезни, моля, имайте предвид, че не можем да гарантираме за точността или навременността на външно хостваните материали.

  • Работа със съхранени процедури на 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. MySQL (или PHP?) групира резултати по данни от полето

  2. Как да покажете редовете, които не присъстват в друга таблица в MySQL

  3. Разбиране на HAProxy статистиката за MySQL и PostgreSQL

  4. Как да промените часовата зона на MySQL сървъра

  5. Вземете списък с дати между две дати