Den här artikeln beskriver hur du skapar och kör MySQL-lagrade funktioner och procedurer på ditt A2 Hosting-konto. Du kan använda lagrade funktioner och procedurer för ett stort antal scenarier. Till exempel kan väldesignade lagrade funktioner och procedurer förbättra databassäkerheten, förbättra dataintegriteten och öka prestandan.
Lagrade funktioner
MySQL-lagrade funktioner ger ett kraftfullt och flexibelt sätt att manipulera och bearbeta data. Du kan definiera och köra lagrade funktioner på vilken A2 Hosting-server som helst som använder MySQL.
Konfigurera en testdatabas
För att visa ett grundläggande exempel på lagrade funktioner, låt oss börja med att skapa en databas som vi kan använda för teständamål. Ersätt användarnamn i följande SQL-sats med ditt kontoanvändarnamn:
SKAPA DATABAS användarnamn _test;Du kan köra det föregående SQL-kommandot (och följande SQL-kommandon) från kommandoraden med MySQL-verktyget eller i din webbläsare med phpMyAdmin.
Om du använder phpMyAdmin, klicka på namnet användarnamn _test för att välja databasen. Annars, om du använder kommandoradsprogrammet mysql, skriv följande SQL-sats:
ANVÄND användarnamn _test;
Skapa sedan en tabell i användarnamnet _test databas med namnet produkter . För att göra detta, kör följande SQL-sats:
CREATE TABLE-produkter (prod_id INT INTE 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, PRIMÄRNYCKEL(prod>_id));Följande SQL-sats lägger till några exempeldata till produkterna tabell:
INSERT INTO products (prod_name, prod_cost, prod_price) VÄRDEN ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);Skapa den lagrade funktionen
Nu när vi har en databas och en tabell att arbeta med är vi redo att skapa en lagrad funktion. Låt oss skapa en funktion som heter calcProfit . Denna funktion tar två ingångsparametrar:kostnaden och priset för något. Den beräknar vinsten genom att subtrahera kostnaden från priset och returnerar sedan värdet till det anropande uttrycket.
För att skapa denna lagrade funktion, kör följande MySQL-satser:
DELIMITER $$CREATE FUNCTION calcProfit(kostnad FLOAT, pris FLOAT) GÅR DECIMAL(9,2)BÖRJA DEKLARERA vinst DECIMAL(9,2); SET vinst =pris-kostnad; RETUR vinst;END$$DELIMITER;DELIMITER kommandot i början av dessa satser förhindrar MySQL från att bearbeta funktionsdefinitionen för tidigt. DELIMITER kommandot i slutet av dessa satser återställer bearbetningen till det normala.Använda den lagrade funktionen
Du kan nu utföra den lagrade funktionen i en databasfråga. Följande SQL-sats visar hur du gör detta:
SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;Denna SQL-sats returnerar följande resultat:
+--------+--------------+-------------+--- ---+--------+| prod_id | prod_name | prod_kostnad | prod_pris | vinst |+---------+--------------+-----------+--------- --+--------+| 1 | Grundläggande widget | 5,95 | 8.35 | 2,40 || 2 | Mikrowidget | 0,95 | 1,35 | 0,40 || 3 | Mega Widget | 99,95 | 140 | 40,05 |+--------+--------------+------------------ --+--------+Som du kan se är calcProfit Funktionen beräknar automatiskt vinsten (priset minus kostnaden) för varje produkt i tabellen.
Lagrade procedurer
Lagrade procedurer förväxlas ibland med lagrade funktioner, men de är olika på vissa viktiga sätt. Lagrade procedurer måste till exempel anropas med CALL sats, medan lagrade funktioner kan användas direkt i SQL-uttryck. Du kan definiera och köra lagrade procedurer på vilken A2 Hosting-server som helst som använder MySQL.
Följande MySQL-satser visar hur man skapar en mycket grundläggande lagrad procedur som heter procedurTest . Denna procedur gör en enkel uppslagning av produkterna tabell som vi använde i exemplet med lagrad funktion ovan. Även om denna procedur inte har så mycket praktisk användning, visar den den korrekta syntaxen och strukturen för att deklarera en lagrad procedur:
DELIMITER $$CREATE PROCEDURE procedureTest()BEGIN SELECT prod_name FROM products;END$$DELIMITER;För att utföra den lagrade proceduren, använd följande MySQL-sats:
CALL procedureTest() \GOm du använder phpMyAdmin, skriv in den föregående MySQL-satsen utan \G alternativet i slutet.Mer information
För mer information om lagrade procedurer och funktioner i MySQL, besök http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html.