Funktionerne, der er gemt i MySQL, bruges til at indkapsle beregninger eller operationer med poster og datafelter, der er hentet fra en SQL -forespørgsel og er almindelige opgaver eller forretningsregler.
En stor fordel er, at de kan genbruges, og programmeringssproget, som funktionerne udvikles i, er gennem SQL -sætninger og betingede eller gentagne strukturer.
I modsætning til en lagret procedure kan du bruge en lagret funktion i SQL -sætninger, hvor du bruger et udtryk, der giver dig mulighed for at oprette betingede regler.
Lad os se et eksempel, hvor vi opretter en database over en skole:
Opret DATABASE `college`Dernæst opretter vi en tabel med elevernes testresultater
- - Tabelstruktur for tabel `eksaminer` - Opret tabel` eksaminer` (`id` INT (11) NOT NULL AUTO_INCREMENT,` idalumno` INT (11) NOT NULL, `material id` INT (11) NOT NULL,` note1 `DECIMAL (10,2) IKKE NULL, 'note2' DECIMAL (10,2) IKKE NULL, 'note3' DECIMAL (10,2) IKKE NULL, 'gennemsnitlig' DECIMAL (10,2) IKKE NULL, 'angiv' VARCHAR (100) NULL DEFAULT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB - Indexes of table` notaseams` - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id`); Dernæst tilføjer vi nogle data til tabeleksamenerne - Datadump for tabellen `notasensam` INSERT INTO` notation exam` (` id`, `idalumno`,` subjectid`, `note1`,` note2`, `note3`,` gennemsnit`, `tilstand`) VÆRDIER (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 ',' ');
Dernæst opretter vi en lagret funktion, der går gennem hele karaktertabellen og beregner den gennemsnitlige karakter for hver elev efter emne og opdaterer tabellen for at angive, om det er bestået eller ikke bestået.
Vi kan oprette funktionen fra Phpmyadmin eller enhver editor, der giver os mulighed for at skrive SQL -kode;
CREATE DEFINER = `root` @` localhost` PROCEDURE `calculate average` () SPROG SQL IKKE DETERMINISTISK INDEHOLDER SQL SQL SECURITY DEFINER COMMENT '' BEGIN / * Jeg erklærer variabler for funktionen * / DECLARE final BOOL DEFAULT FALSE; DECLARE id INT; ERKLÆR INT studerende; ERKLÆR INT -sagen; DECLARE note1 FLOAT; DECLARE note2 FLOAT; DECLARE note3 FLOAT; DECLARE prom FLOAT; / * Jeg erklærer et rekordsæt eller en markør med dataene fra sql -forespørgslen * / DECLARE rslist CURSOR FOR SELECT id, student -id, material -id, note1, note2, note3 fra testnotater; / * Jeg erklærer en variabel for at registrere afslutningen på en gentagende sløjfe DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Jeg åbner rekordsættet for at starte datatraversal med en loop * / OPEN rslista; loop: LOOP FETCH rslist I ID, elev, emne, grade1, grade2, grade3; / * Jeg beregner gennemsnittet * / sæt avg = (note1 + note2 + note3) / 3; / * Jeg gemmer det ved at opdatere tabellen * / opdatere eksamensnotationssæt gennemsnit = d hvor idalumno = elev og idmateria = emne; / * Hvis karakteren er større end eller lig med 7, opdaterer jeg status som Godkendt ellers vil status mislykkes * / HVIS av> = 7 SÅ opdaterer notaseams status = 'Godkendt', hvor idalumno = elev og idmateria = emne; ELSE opdateringseksamen notationssæt status = 'Failed' hvor elev -id = elev og emne -id = emne; AFSLUT HVIS; HVIS ENDELIGT LUK derefter rslist; LEAVE loop; AFSLUT HVIS; END LOOP; ENDEDerefter kan vi udføre funktionen ved hjælp af følgende kommando:
CALL `beregne gennemsnit` ()Resultatet bliver opdateringen af gennemsnits- og statuskolonnerne automatisk.
Funktioner, der er gemt i MySQL, bruges normalt til beregninger og operationer, mens lagrede procedurer normalt bruges til at udføre forretningsregler.
Funktionerne påvirker normalt ikke databasens struktur, men for at udføre nogle beregninger, sammenligne og returnere et resultat eller ændre data i en tabel i databasen kan vi også oprette en trigger til at kontrollere eller revidere de ændringer, en funktion foretager.
Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt