Funktionerna som lagras i MySQL används för att inkapsla beräkningar eller operationer med poster och datafält som är hämtade från en SQL -fråga och är vanliga uppgif.webpter eller affärsregler.
En stor fördel är att de är återanvändbara och programmeringsspråket där funktionerna utvecklas är genom SQL -satser och villkorade eller repetitiva strukturer.
Till skillnad från en lagrad procedur kan du använda en lagrad funktion i SQL -satser där du använder ett uttryck som låter dig skapa villkorliga regler.
Låt oss se ett exempel vi skapar en databas för en skola:
SKAPA DATABASE `college`Därefter skapar vi en tabell med studentprov
- - Tabellstruktur för tabell `undersökningar` - SKAPA TABELL` undersökningar` (` id` INT (11) NOT NULL AUTO_INCREMENT, `idalumno` INT (11) NOT NULL,` material id` INT (11) NOT NULL, `note1 `DECIMAL (10,2) NOT NULL, 'note2' DECIMAL (10,2) NOT NULL, 'note3' DECIMAL (10,2) NOT NULL, 'average' DECIMAL (10,2) NOT NULL, 'state' VARCHAR (100) NULL DEFAULT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB - Index of table` notaseams` - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id`); Därefter lägger vi till lite data i tabellundersökningarna - Datadump för tabellen 'notasensam' INSERT INTO 'notation exam' ('id', 'idalumno', 'subjectid', 'note1', 'note2', 'note3', ' medelvärde ',' tillstånd ') VÄRDEN (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, '10 .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 ',' ');
Därefter skapar vi en lagrad funktion som går igenom hela betygstabellen och beräknar medelbetyget för varje elev efter ämne och uppdaterar tabellen för att indikera om det är godkänt eller underkänt.
Vi kan skapa funktionen från Phpmyadmin eller någon redigerare som tillåter oss att skriva SQL -kod;
SKAPA DEFINER = `root` @` localhost` PROCEDURE `beräkna medelvärde` () SPRÅK SQL INTE DETERMINISTISK INNEHÅLL SQL SQL SÄKERHET DEFINER KOMMENTAR '' BEGIN / * Jag deklarerar variabler för funktionen * / DECLARE final BOOL DEFAULT FALSE; DEKLARERA ID INT; DEKLARERA INT -student; DEKLARERA INT fråga; DEKLARERA note1 FLOAT; DEKLARERA note2 FLOAT; DECLARE note3 FLOAT; DEKLARERA prom FLOAT; / * Jag deklarerar en rekorduppsättning eller markör med data från sql -frågan * / DECLARE rslist CURSOR FOR SELECT id, student -id, material -id, note1, note2, note3 från testanteckningar; / * Jag deklarerar en variabel för att upptäcka slutet på en repeterande slinga DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Jag öppnar postuppsättningen för att starta datatrafik med en loop * / OPEN rslista; loop: LOOP FETCH rslist I ID, student, ämne, betyg 1, betyg 2, betyg 3; / * Jag beräknar genomsnittet * / set avg = (note1 + note2 + note3) / 3; / * Jag sparar det genom att uppdatera tabellen * / uppdatera examensnotationsuppsättning genomsnitt = d där idalumno = student och idmateria = ämne; / * Om betyget är större än eller lika med 7 uppdaterar jag statusen som Godkänd annars misslyckas statusen * / OM av> = 7 Därefter uppdaterar notaseams status = 'Godkänd' där idalumno = student och idmateria = ämne; ELSE uppdatera examen notation set status = 'Misslyckad' där student id = student och ämne id = ämne; SLUTA OM; OM det är slutDärefter STÄNG rslist; LEAVE loop; SLUTA OM; END LOOP; SLUTETSedan kan vi köra funktionen med följande kommando:
CALL `beräkna medelvärde` ()Resultatet blir uppdateringen av genomsnitts- och statuskolumnerna automatiskt.
Funktioner som lagras i MySQL används normalt för beräkningar och operationer, medan lagrade procedurer normalt används för att utföra affärsregler.
Funktionerna påverkar vanligtvis inte databasens struktur, men för att utföra en beräkning, jämföra och returnera ett resultat eller ändra en data i en tabell i databasen kan vi också skapa en utlösare för att kontrollera eller granska de ändringar en funktion gör.
Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng