Funksjoner lagret i MySQL

Innholdsfortegnelse

Funksjonene som er lagret i MySQL brukes til å innkapsle beregninger eller operasjoner med poster og datafelt som er hentet fra en SQL -spørring og er vanlige oppgaver eller forretningsregler.

En stor fordel er at de er gjenbrukbare og programmeringsspråket som funksjonene utvikles i er gjennom SQL -setninger og betingede eller repeterende strukturer.

I motsetning til en lagret prosedyre kan du bruke en lagret funksjon i SQL -setninger der du bruker et uttrykk som lar deg lage betingede regler.

La oss se et eksempel på hvordan vi lager en database over en skole:

 LAG DATABASE `college`
Deretter lager vi en tabell med studentprøver
 - - Tabellstruktur for tabell `eksaminer` - SKAP TABELL` eksamener` (` 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 - Indekser for tabellen` notaseams` - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id`); Deretter legger vi til noen data i tabelleksamenene - Datadump for tabellen `notasensam` INSERT INTO` notation exam` (` id`, `idalumno`,` subjectid`, `note1`,` note2`, `note3`,` gjennomsnitt`, `tilstand`) VERDIER (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 ',' ');

Deretter vil vi lage en lagret funksjon som vil gå gjennom hele karaktertabellen og beregne gjennomsnittskarakteren for hver elev etter emne og oppdatere tabellen for å indikere om det er Bestått eller Ikke bestått.

Vi kan lage funksjonen fra Phpmyadmin eller hvilken som helst editor som lar oss skrive SQL -kode;

 CREATE DEFINER = `root` @` localhost` PROSEDYRE `beregne gjennomsnitt` () SPRÅK SQL IKKE DETERMINISTISK INNEHOLDER SQL SQL SIKKERHET DEFINER KOMMENTAR '' BEGIN / * Jeg erklærer variabler for funksjonen * / DECLARE final BOOL DEFAULT FALSE; DECLARE id INT; ERKLÆR INT student; ERKLÆR INT sak; ERKLÆR note 1 FLOAT; DECLARE note2 FLOAT; ERKLÆR note3 FLOAT; DECLARE prom FLOAT; / * Jeg erklærer et rekordsett eller en markør med dataene fra sql -spørringen * / DECLARE rslist CURSOR FOR SELECT id, student -ID, material -ID, note1, note2, note3 fra testnotater; / * Jeg erklærer en variabel for å oppdage slutten på en gjentagende sløyfe FORKLAR FORTSETT HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Jeg åpner platesettet for å starte datatrafikken med en loop * / OPEN rslista; loop: LOOP FETCH rslist INTO id, student, subject, grade1, grade2, grade3; / * Jeg beregner gjennomsnittet * / sett avg = (note1 + note2 + note3) / 3; / * Jeg lagrer det ved å oppdatere tabellen * / oppdatere eksamensnotasjonssett gjennomsnitt = d hvor idalumno = student og idmateria = emne; / * Hvis karakteren er større enn eller lik 7, oppdaterer jeg statusen som Godkjent ellers blir statusen Mislykket * / IF av> = 7 DA oppdaterer notaseams status = 'Approved' hvor idalumno = student og idmateria = emne; ELSE oppdateringseksamen notasjonssett status = 'Mislyktes' der student -id = student og emne -ID = emne; SLUTT OM; HVIS ENDELIGEN SLUTT rslist; LEAVE loop; SLUTT OM; END LOOP; SLUTT
Deretter kan vi utføre funksjonen ved å bruke følgende kommando:
 RING `beregne gjennomsnitt` ()
Resultatet blir oppdateringen av gjennomsnitts- og statuskolonnene automatisk.

Funksjoner som er lagret i MySQL brukes vanligvis til beregninger og operasjoner, mens lagrede prosedyrer normalt brukes til å utføre forretningsregler.

Funksjonene påvirker vanligvis ikke strukturen i databasen, men for å utføre noen beregninger, sammenligne og returnere et resultat eller endre data i en tabell i databasen, kan vi også lage en utløser for å kontrollere eller revidere endringene en funksjon gjør.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave