W tym artykule opisano, jak tworzyć i wykonywać przechowywane funkcje i procedury MySQL na koncie A2 Hosting. Funkcji i procedur przechowywanych można używać w wielu różnych scenariuszach. Na przykład dobrze zaprojektowane funkcje i procedury składowane mogą zwiększyć bezpieczeństwo bazy danych, poprawić integralność danych i zwiększyć wydajność.
Przechowywane funkcje
Funkcje przechowywane w MySQL zapewniają potężny i elastyczny sposób manipulowania i przetwarzania danych. Możesz zdefiniować i uruchomić przechowywane funkcje na dowolnym serwerze A2 Hosting, który używa MySQL.
Konfigurowanie testowej bazy danych
Aby zademonstrować podstawowy przykład funkcji składowanych, zacznijmy od stworzenia bazy danych, którą możemy wykorzystać do celów testowych. W poniższej instrukcji SQL zastąp nazwa użytkownika z nazwą użytkownika konta:
CREATE DATABASE username_test;Możesz uruchomić poprzednie polecenie SQL (i następujące polecenia SQL) z wiersza poleceń za pomocą narzędzia MySQL lub w przeglądarce internetowej za pomocą phpMyAdmin.
Jeśli używasz phpMyAdmin, kliknij nazwę nazwa użytkownika _test, aby wybrać bazę danych. W przeciwnym razie, jeśli używasz programu wiersza poleceń mysql, wpisz następującą instrukcję SQL:
USE username_test;
Następnie utwórz tabelę w nawie użytkownika _test baza danych o nazwie produkty . Aby to zrobić, uruchom następującą instrukcję SQL:
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
Poniższa instrukcja SQL dodaje kilka przykładowych danych do produktów tabela:
INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);
Tworzenie funkcji przechowywanej
Teraz, gdy mamy już bazę danych i tabelę do pracy, jesteśmy gotowi do utworzenia funkcji przechowywanej. Utwórzmy funkcję o nazwie calcProfit . Ta funkcja przyjmuje dwa parametry wejściowe:koszt i cenę czegoś. Oblicza zysk, odejmując koszt od ceny, a następnie zwraca wartość do wyrażenia wywołującego.
Aby utworzyć tę przechowywaną funkcję, uruchom następujące instrukcje MySQL:
DELIMITER $$ CREATE FUNCTION calcProfit(cost FLOAT, price FLOAT) RETURNS DECIMAL(9,2) BEGIN DECLARE profit DECIMAL(9,2); SET profit = price-cost; RETURN profit; END$$ DELIMITER ;DELIMITER polecenie na początku tych instrukcji zapobiega zbyt szybkiemu przetwarzaniu definicji funkcji przez MySQL. DELIMITER polecenie na końcu tych instrukcji przywraca normalne przetwarzanie.
Korzystanie z funkcji przechowywanej
Możesz teraz wykonać zapisaną funkcję w zapytaniu do bazy danych. Poniższa instrukcja SQL pokazuje, jak to zrobić:
SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;
Ta instrukcja SQL zwraca następujące wyniki:
+---------+--------------+-----------+------------+--------+ | prod_id | prod_name | prod_cost | prod_price | profit | +---------+--------------+-----------+------------+--------+ | 1 | Basic Widget | 5.95 | 8.35 | 2.40 | | 2 | Micro Widget | 0.95 | 1.35 | 0.40 | | 3 | Mega Widget | 99.95 | 140 | 40.05 | +---------+--------------+-----------+------------+--------+
Jak widać, calcProfit funkcja automatycznie oblicza zysk (cena minus koszt) dla każdego produktu w tabeli.
Procedury przechowywane
Procedury składowane są czasami mylone z funkcjami składowanymi, ale różnią się one pod pewnymi ważnymi względami. Procedury przechowywane, na przykład, muszą być wywoływane za pomocą CALL instrukcji, natomiast funkcje składowane mogą być używane bezpośrednio w wyrażeniach SQL. Możesz zdefiniować i uruchomić procedury składowane na dowolnym serwerze A2 Hosting, który używa MySQL.
Poniższe instrukcje MySQL pokazują, jak utworzyć bardzo podstawową procedurę składowaną o nazwie procedureTest . Ta procedura wykonuje proste wyszukiwanie produktów tabela, której użyliśmy w powyższym przykładzie funkcji przechowywanej. Chociaż ta procedura nie ma zbyt dużego praktycznego zastosowania, pokazuje poprawną składnię i strukturę do deklarowania procedury składowanej:
DELIMITER $$ CREATE PROCEDURE procedureTest() BEGIN SELECT prod_name FROM products; END$$ DELIMITER ;
Aby wykonać procedurę składowaną, użyj następującej instrukcji MySQL:
CALL procedureTest() \GJeśli używasz phpMyAdmina, wpisz poprzednią instrukcję MySQL bez \G opcja na końcu.
Więcej informacji
Więcej informacji o procedurach składowanych i funkcjach w MySQL można znaleźć pod adresem http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html.