sql >> Database teknologi >  >> RDS >> Mysql

Sådan oprettes og udføres MySQL-lagrede funktioner og procedurer

Denne artikel beskriver, hvordan du opretter og udfører MySQL-lagrede funktioner og procedurer på din A2 Hosting-konto. Du kan bruge lagrede funktioner og procedurer til en lang række scenarier. For eksempel kan veldesignede lagrede funktioner og procedurer forbedre databasesikkerheden, forbedre dataintegriteten og øge ydeevnen.

Gemte funktioner

MySQL-lagrede funktioner giver en kraftfuld og fleksibel måde at manipulere og behandle data på. Du kan definere og køre lagrede funktioner på enhver A2 Hosting-server, der bruger MySQL.

Opsætning af en testdatabase

For at demonstrere et grundlæggende eksempel på lagrede funktioner, lad os starte med at oprette en database, som vi kan bruge til testformål. I den følgende SQL-sætning skal du erstatte brugernavn med dit kontobrugernavn:

OPRET DATABASE brugernavn _test;
Du kan køre den forrige SQL-kommando (og de følgende SQL-kommandoer) fra kommandolinjen ved hjælp af MySQL-værktøjet eller i din webbrowser ved hjælp af phpMyAdmin.

Hvis du bruger phpMyAdmin, skal du klikke på navnet brugernavn _test for at vælge databasen. Ellers, hvis du bruger mysql-kommandolinjeprogrammet, skal du skrive følgende SQL-sætning:

BRUG brugernavn _test;

Opret derefter en tabel i brugernavnet _test database med navnet produkter . For at gøre dette skal du køre følgende SQL-sætning:

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

Den følgende SQL-sætning tilføjer nogle eksempeldata til produkterne tabel:

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);
Oprettelse af den lagrede funktion

Nu hvor vi har en database og en tabel at arbejde med, er vi klar til at oprette en gemt funktion. Lad os oprette en funktion ved navn calcProfit . Denne funktion tager to inputparametre:prisen og prisen på noget. Den beregner fortjenesten ved at trække prisen fra prisen og returnerer derefter værdien til det kaldende udtryk.

For at oprette denne lagrede funktion skal du køre følgende MySQL-sætninger:

DELIMITER $$CREATE FUNCTION calcProfit(cost FLOAT, price FLOAT) RETURER DECIMAL(9,2)BEGIN ERKLÆR profit DECIMAL(9,2); SET profit =pris-omkostning; RETURN profit;END$$DELIMITER;
DELIMITER kommandoen i begyndelsen af ​​disse udsagn forhindrer MySQL i at behandle funktionsdefinitionen for tidligt. DELIMITER kommandoen i slutningen af ​​disse udsagn returnerer behandlingen til normal.
Brug af den lagrede funktion

Du kan nu udføre den lagrede funktion i en databaseforespørgsel. Følgende SQL-sætning viser, hvordan du gør dette:

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

Denne SQL-sætning returnerer følgende resultater:

+--------+-------------------+--- ---+--------+| prod_id | prod_name | prod_cost | prod_pris | overskud |+---------+------------------------- --+--------+| 1 | Grundlæggende widget | 5,95 | 8.35 | 2,40 || 2 | Mikro-widget | 0,95 | 1,35 | 0,40 || 3 | Mega Widget | 99,95 | 140 | 40,05 |+---------+------------------------- --+--------+

Som du kan se, er calcProfit funktion beregner automatisk fortjenesten (prisen minus omkostningerne) for hvert produkt i tabellen.

Lagrede procedurer

Lagrede procedurer forveksles nogle gange med lagrede funktioner, men de er forskellige på nogle vigtige måder. Lagrede procedurer skal f.eks. aktiveres med OPKALD sætning, hvorimod lagrede funktioner kan bruges direkte i SQL-udtryk. Du kan definere og køre lagrede procedurer på enhver A2 Hosting-server, der bruger MySQL.

Følgende MySQL-sætninger viser, hvordan man opretter en meget grundlæggende lagret procedure ved navn procedureTest . Denne procedure udfører et simpelt opslag på produkterne tabel, som vi brugte i eksemplet med lagret funktion ovenfor. Selvom denne procedure ikke har megen praktisk brug, demonstrerer den den korrekte syntaks og struktur til at erklære en lagret procedure:

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

For at udføre den lagrede procedure, brug følgende MySQL-sætning:

CALL procedureTest() \G
Hvis du bruger phpMyAdmin, skal du skrive den forrige MySQL-sætning uden \G mulighed i slutningen.

Flere oplysninger

For mere information om lagrede procedurer og funktioner i MySQL, besøg venligst http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html.


  1. SQL:søg efter en streng i hver varchar-kolonne i en database

  2. Hvor kan man downloade Runtime Kit til Microsoft Access 2016

  3. SQL Server Transactional Replication Configuration

  4. Hvad er omkostningerne ved at bruge AUTOINCREMENT til SQLite på Android?