Functies opgeslagen in MySQL

Inhoudsopgave

De functies die zijn opgeslagen in MySQL worden gebruikt om berekeningen of bewerkingen in te kapselen met records en gegevensvelden die zijn overgenomen uit een SQL-query en die veelvoorkomende taken of bedrijfsregels zijn.

Een groot voordeel is dat ze herbruikbaar zijn en dat de programmeertaal waarin de functies worden ontwikkeld via SQL-statements en voorwaardelijke of repetitieve structuren is.

In tegenstelling tot een opgeslagen procedure, kunt u een opgeslagen functie gebruiken in SQL-instructies, waarbij u een expressie gebruikt waarmee u voorwaardelijke regels kunt maken.

Laten we een voorbeeld bekijken waarin we een database van een school maken:

 MAAK DATABASE `college`
Vervolgens maken we een tabel met testscores van studenten
 - - Tabelstructuur voor tabel `examnotes` - CREATE TABLE` examnotes` (`id` INT (11) NOT NULL AUTO_INCREMENT,` idalumno` INT (11) NOT NULL, `material id` INT (11) NOT NULL, `note1 ` DECIMAAL (10,2) NIET NULL,` note2` DECIMAAL (10,2) NIET NULL, `note3` DECIMAAL (10,2) NIET NULL,` gemiddelde` DECIMAAL (10,2) NIET NULL, `state` VARCHAR (100) NULL STANDAARD NULL, PRIMAIRE SLEUTEL (` id`)) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB - Indexen van tabel `notaseams` - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id` ); Vervolgens voegen we wat gegevens toe aan de tabel examennotities - Gegevensdump voor de tabel `notasensam` INSERT INTO` notatie examen` (`id`,` idalumno`, `subjectid`,` note1`, `note2`,` note3`, ` gemiddelde`,` staat`) WAARDEN (1, 1000, 1, '8.00', '9.25', '7.00', '0.00', ''), (2, 1001, 1, '6.33', '8.50' , '8.00', '0.00', ''), (3, 1002, 1, '1 0.00 ',' 7.50 ',' 8.33 ',' 0.00 ',' '), (4, 1003, 2,' 4.50 ' , '2.00', '5.50', '0.00', ''), (5, 1004, 1, '3.50', '2.00', '4.00', '0.00', '');

Vervolgens zullen we een opgeslagen functie maken die de hele cijfertabel doorloopt en het gemiddelde cijfer voor elke student per onderwerp berekent en de tabel bijwerken om aan te geven of het geslaagd of mislukt is.

We kunnen de functie maken vanuit Phpmyadmin of elke andere editor waarmee we SQL-code kunnen schrijven;

 CREATE DEFINER = `root` @` localhost` PROCEDURE `bereken gemiddelde` () TAAL SQL NIET DETERMINISTISCH BEVAT SQL SQL SECURITY DEFINER COMMENTAAR '' BEGIN / * Ik declareer variabelen voor de functie * / DECLARE final BOOL DEFAULT FALSE; VERKLAREN ID INT; VERKLARING INT student; VERKLAREN INT kwestie; VERKLAREN opmerking1 VLOTTER; VERKLAREN noot2 DRIJVEN; VERKLAREN noot 3 ZWEVEND; VERKLAREN prom FLOAT; / * Ik declareer een recordset of cursor met de gegevens van de sql-query * / DECLARE rslist CURSOR FOR SELECT id, student id, material id, note1, note2, note3 van testnotities; / * Ik declareer een variabele om het einde van een herhalende lus te detecteren DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Ik open de recordset om de datatraversal te starten met een lus * / OPEN rslista; lus: LOOP FETCH rslist INTO id, student, onderwerp, graad1, graad2, graad3; / * ik bereken het gemiddelde * / set avg = (note1 + note2 + note3) / 3; / * Ik sla het op door de tabel bij te werken * / update examennotatie set gemiddeld = d waarbij idalumno = student en idmateria = onderwerp; / * Als het cijfer groter is dan of gelijk is aan 7, update ik de status als Goedgekeurd, anders wordt de status Mislukt * / IF av> = 7 THEN update notaseams set status = 'Goedgekeurd' waarbij idalumno = student en idmateria = onderwerp; ELSE update examennotatie set status = 'Mislukt' waarbij student-ID = student en onderwerp-ID = onderwerp; STOP ALS; INDIEN definitiefDAN de lijst SLUITEN; VERLATEN lus; STOP ALS; EINDE LUS; EINDE
Dan kunnen we de functie uitvoeren met het volgende commando:
 BEL `bereken gemiddelde` ()
Het resultaat is de automatische update van de gemiddelde- en statuskolommen.

Functies die zijn opgeslagen in MySQL worden normaal gesproken gebruikt voor berekeningen en bewerkingen, terwijl opgeslagen procedures normaal worden gebruikt voor het uitvoeren van bedrijfsregels.

De functies hebben meestal geen invloed op de structuur van de database, maar om een ​​berekening uit te voeren, een resultaat te vergelijken en terug te sturen of gegevens in een tabel in de database te wijzigen, kunnen we ook een trigger maken om de wijzigingen die een functie aanbrengt te controleren of te controleren.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave