Gespeicherte Funktionen gehören ebenfalls zu den prozeduralen Objekten, ähnlich wie gespeicherte Prozeduren. Diese Codeausschnitte enthalten SQL- und prozedurale Anweisungen, die von Anwendungen und SQL aufgerufen werden können. Sie weisen jedoch auch einige Unterschiede auf:
1. Die Speicherfunktion hat keine Ausgabeparameter, da die Speicherfunktion selbst der Ausgabeparameter ist.
2. Die CALL-Anweisung kann nicht zum Aufrufen gespeicherter Funktionen verwendet werden.
3. Die gespeicherte Funktion muss eine RETURN-Anweisung enthalten, und diese spezielle SQL-Anweisung darf nicht in die gespeicherte Prozedur aufgenommen werden
Verwenden Sie die CREATE FUNCTION-Anweisung, um eine gespeicherte Funktion zu erstellen
Syntaxformat:
CREATE FUNCTION Name der gespeicherten Funktion ([Parameter[,...]])
RETURNS-Typ
Funktionskörper
Hinweis: Gespeicherte Funktionen dürfen nicht denselben Namen haben wie gespeicherte Prozeduren. Der Hauptteil der gespeicherten Funktion muss eine RETURN-Wertanweisung enthalten, und der Wert ist der Rückgabewert der gespeicherten Funktion.
Beispiel: Erstellen Sie eine gespeicherte Funktion, die als Ergebnis die Anzahl der Bücher in der Buchtabelle zurückgibt.
DELIMITER $$ CREATE FUNCTION num_book() RETURNS INTEGER BEGIN RETURN(SELECT COUNT(*)FROM Book); END$$ DELIMITER ;
Wenn die RETURN-Klausel eine SELECT-Anweisung enthält, kann das Rückgabeergebnis der SELECT-Anweisung nur eine Zeile und eine Spalte mit Werten sein . Auch wenn die gespeicherte Funktion keine Parameter erfordert, müssen Sie beim Aufrufen () verwenden, zum Beispiel: num_book().
Beispiel: Erstellen Sie eine gespeicherte Funktion, um Datensätze zu löschen, die in der Tabelle „Verkaufen“, aber nicht in der Tabelle „Buch“ vorhanden sind.
DELIMITER $$ CREATE FUNCTION del_sell(book_bh CHAR(20)) RETURNS BOOLEAN BEGIN DECLARE bh CHAR(20); SELECT 图书编号 INTO bh FROM Book WHERE 图书编号=book_bh; IF bh IS NULL THEN DELETE FROM Sell WHERE 图书编号=book_bh; RETURN TRUE; ELSE RETURN FALSE; END IF; END$$ DELIMITER ;
Die gespeicherte Funktion gibt die Buchnummer als Eingabeparameter an. Durchsuchen Sie zunächst die Buchtabelle anhand der angegebenen Buchnummer um zu sehen, ob es ein Buch mit dieser Buchnummer gibt, geben Sie false zurück, falls vorhanden, geben Sie true zurück. Gleichzeitig muss das Buch mit dieser Buchnummer aus der Sell-Tabelle gelöscht werden. Um die gespeicherten Prozeduren in der Datenbank aufzulisten, verwenden Sie den Befehl SHOW FUNCTION STATUS.
Nachdem die gespeicherte Funktion erstellt wurde, ist die Methode zum Aufrufen der gespeicherten Funktion dieselbe wie die Verwendung der vom System bereitgestellten integrierten Funktion, wobei beide das Schlüsselwort SELECT verwenden.
Syntaxformat:
SELECT Speicherfunktionsname ([Parameter [,...]])
Beispiel: Erstellen Sie eine Speicherfunktion „publish_book“, rufen Sie die Speicherfunktion „author_book“ auf und ermitteln Sie den Autor des Buches Der Nachname des Autors ist „Zhang“, wenn ja, wird der Veröffentlichungszeitpunkt zurückgegeben, wenn nicht, wird „ungenügend“ zurückgegeben.
DELIMITER $$ CREATE FUNCTION publish_book(b_name CHAR(20)) RETURNS CHAR(20) BEGIN DECLARE name CHAR(20); SELECT author_book(b_name)INTO name; IF name like'张%' THEN RETURN(SELECT 出版时间 FROM Book WHERE 书名=b_name); ELSE RETURN'不合要求'; END IF; END$$ DELIMITER ;
Rufen Sie die gespeicherte Funktion Publish_Book auf, um die Ergebnisse anzuzeigen:
SELECT Publish_Book('Computer Network Technology');
Die Methode zum Löschen gespeicherter Funktionen ist grundsätzlich dieselbe wie das Löschen gespeicherter Prozeduren. Verwenden Sie die DROP FUNCTION-Anweisung
Grammatikformat:
DROP FUNCTION [IF EXISTS] gespeicherter FunktionsnameHinweis: Die IF EXISTS-Klausel ist eine Erweiterung von MySQL, sie verhindert das Auftreten von FehlernBeispiel: Gespeicherte Funktion löschen a
DROP FUNCTION IF EXISTS a;
CREATE TABLE table1(a INTEGER); CREATE TRIGGER table1_insert AFTER INSERT ON table1 FOR EACH ROW SET@str='TRIGGER IS WORKING';Nach dem Login kopierenUm zu sehen, welche Trigger sich in der Datenbank befinden, verwenden Sie den Befehl SHOW TRIGGERS.
SQL-Anweisungen in MySQL-Triggern können sich auf jede Spalte in der Tabelle beziehen. Sie können den Namen der Spalte jedoch nicht direkt zum Markieren verwenden, was das System verwirren würde, da die Anweisung, die den Auslöser aktiviert, möglicherweise den Spaltennamen geändert, gelöscht oder einen neuen hinzugefügt hat, während der alte Name der Spalte vorhanden ist zur gleichen Zeit. Muss mit dieser Syntax identifiziert werden: NEW.column_name oder OLD.column_name. NEW.column_name wird verwendet, um auf eine Spalte einer neuen Zeile zu verweisen, und OLD.column_name wird verwendet, um auf eine Spalte einer vorhandenen Zeile zu verweisen, bevor diese aktualisiert oder gelöscht wird.
Für INSERT-Anweisungen ist nur NEW zulässig, und für DELETE-Anweisungen ist nur OLD zulässig. Die UPDATE-Anweisung kann gleichzeitig mit NEW und OLD verwendet werden.
Erstellen Sie einen Auslöser, sodass beim Löschen der Informationen zu einem Buch in der Tabelle „Buch“ gleichzeitig alle mit dem Buch verbundenen Daten in der Tabelle „Verkaufen“ gelöscht werden.
DELIMITER $$ CREATE TRIGGER book_del AFTER DELETE ON Book FOR EACH ROW BEGIN DELETE FROM Sell WHERE 图书编号=OLD.图书编号; END$$ DELIMITER ;
Wenn der Trigger den Aktualisierungsvorgang der Tabelle selbst auslösen möchte, kann nur der BEFORE-Trigger verwendet werden und der AFTER-Trigger ist nicht zulässig.
4. Rufen Sie die gespeicherte Prozedur im Trigger auf.
Angenommen, es gibt eine Tabelle member_b mit derselben Struktur wie die Members-Tabelle. Rufen Sie die gespeicherte Prozedur auf Verfahren. Die Daten in der Tabelle „member_b“ werden mit der Tabelle „Members“ synchronisiert.
1 DROP TRIGGER TriggernameBeispiel: Triggermembers_ins löschen
DELIMITER $$ CREATE PROCEDURE data_copy() BEGIN REPLACE member_b SELECT * FROM Members; END$$
Das obige ist der detaillierte Inhalt vonMethoden zum Erstellen gespeicherter Funktionen und zum Festlegen von Triggern in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!