sql >> Databáze >  >> RDS >> Mysql

Jak vytvářet a spouštět uložené funkce a procedury MySQL

Tento článek popisuje, jak vytvořit a spustit uložené funkce a procedury MySQL na vašem účtu A2 Hosting. Uložené funkce a procedury můžete použít pro širokou škálu scénářů. Například dobře navržené uložené funkce a procedury mohou zlepšit zabezpečení databáze, zlepšit integritu dat a zvýšit výkon.

Uložené funkce

Uložené funkce MySQL poskytují výkonný a flexibilní způsob manipulace a zpracování dat. Uložené funkce můžete definovat a spouštět na jakémkoli hostitelském serveru A2, který používá MySQL.

Nastavení testovací databáze

Abychom demonstrovali základní příklad uložených funkcí, začněme vytvořením databáze, kterou můžeme použít pro účely testování. V následujícím příkazu SQL nahraďte uživatelské jméno s uživatelským jménem vašeho účtu:

CREATE DATABASE username_test;
Předchozí příkaz SQL (a následující příkazy SQL) můžete spustit z příkazového řádku pomocí nástroje MySQL nebo ve webovém prohlížeči pomocí phpMyAdmin.

Pokud používáte phpMyAdmin, klikněte na jméno uživatelské jméno _test pro výběr databáze. V opačném případě, pokud používáte program příkazového řádku mysql, zadejte následující příkaz SQL:

USE username_test;

Dále vytvořte tabulku v uživatelském jméně _test databáze s názvem produkty . Chcete-li to provést, spusťte následující příkaz 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));
id));

Následující příkaz SQL přidává některá ukázková data do produktů tabulka:

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);
Vytvoření uložené funkce

Nyní, když máme databázi a tabulku, se kterou můžeme pracovat, jsme připraveni vytvořit uloženou funkci. Vytvořme funkci s názvem calcProfit . Tato funkce přebírá dva vstupní parametry:cenu a cenu něčeho. Vypočítá zisk odečtením nákladů od ceny a poté vrátí hodnotu do volajícího výrazu.

Chcete-li vytvořit tuto uloženou funkci, spusťte následující příkazy 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 příkaz na začátku těchto příkazů zabraňuje MySQL zpracovat definici funkce příliš brzy. DELIMITER příkaz na konci těchto příkazů vrátí zpracování do normálu.
Použití uložené funkce

Nyní můžete provést uloženou funkci v databázovém dotazu. Následující příkaz SQL ukazuje, jak to provést:

SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;

Tento příkaz SQL vrátí následující výsledky:

+---------+--------------+-----------+------------+--------+
| 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 můžete vidět, calcProfit funkce automaticky vypočítá zisk (cena minus náklady) pro každý produkt v tabulce.

Uložené procedury

Uložené procedury jsou někdy zaměňovány s uloženými funkcemi, ale v některých důležitých ohledech se liší. Uložené procedury je například nutné vyvolat pomocí CALL příkaz, zatímco uložené funkce lze použít přímo ve výrazech SQL. Uložené procedury můžete definovat a spouštět na jakémkoli hostitelském serveru A2, který používá MySQL.

Následující příkazy MySQL demonstrují, jak vytvořit velmi základní uloženou proceduru s názvem procedureTest . Tento postup provede jednoduché vyhledávání produktů tabulky, kterou jsme použili ve výše uvedeném příkladu uložené funkce. Ačkoli tento postup nemá příliš praktické využití, ukazuje správnou syntaxi a strukturu pro deklaraci uložené procedury:

DELIMITER $$
CREATE PROCEDURE procedureTest()
BEGIN
  SELECT prod_name FROM products;
END$$
DELIMITER ;

K provedení uložené procedury použijte následující příkaz MySQL:

CALL procedureTest() \G
Pokud používáte phpMyAdmin, zadejte předchozí příkaz MySQL bez \G možnost na konci.

Další informace

Další informace o uložených procedurách a funkcích v MySQL naleznete na http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html.


  1. Jak funguje WEEKDAY() v MariaDB

  2. Jak vypočítat hodnocení v MySQL

  3. Oracle SQL objednávka v poddotazu problémy!

  4. Zda použít SET NAMES