Heim  >  Artikel  >  Datenbank  >  Methoden zum Erstellen gespeicherter Funktionen und zum Festlegen von Triggern in MySQL

Methoden zum Erstellen gespeicherter Funktionen und zum Festlegen von Triggern in MySQL

WBOY
WBOYnach vorne
2023-06-02 22:43:381563Durchsuche

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

1 Erstellen Sie eine gespeicherte Funktion

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.

2. Rufen Sie die gespeicherte Funktion auf

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 Funktionsname

Hinweis: Die IF EXISTS-Klausel ist eine Erweiterung von MySQL, sie verhindert das Auftreten von Fehlern

Beispiel: Gespeicherte Funktion löschen a

DROP FUNCTION IF EXISTS a;

3. Erstellen Sie einen Trigger.

Verwenden Sie die CREATE TRIGGER-Anweisung, um einen Trigger zu erstellen zwei Auslöseoptionen: BEFORE und AFTER , die jeweils angeben, ob der Trigger vor oder nach der Anweisung ausgelöst wird, die ihn aktiviert. Normalerweise wird die AFTER-Option verwendet, um die Anweisung nach der Aktivierung des Triggers auszuführen. Mit der Option BEFORE wird überprüft, ob die neuen Daten den Nutzungsbeschränkungen entsprechen.

Trigger, die SELECT-Anweisungen enthalten, geben Ergebnisse an den Client zurück. Um diese Situation zu vermeiden, sollten Sie die Verwendung von SELECT-Anweisungen in Triggerdefinitionen vermeiden. Ebenso können gespeicherte Prozeduren, die Daten an den Client zurückgeben, nicht aufgerufen werden.

Beispiel: Erstellen Sie eine Tabelle table1 mit nur einer Spalte a, erstellen Sie einen Trigger für die Tabelle und setzen Sie den Wert der Benutzervariablen str bei jedem Einfügevorgang auf TRIGGER IS WORKING.
CREATE TABLE table1(a INTEGER);
CREATE TRIGGER table1_insert AFTER INSERT
ON table1 FOR EACH ROW
SET@str='TRIGGER IS WORKING';

Um 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 Triggername

Beispiel: 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen