Heim  >  Artikel  >  Datenbank  >  Was ist der Unterschied zwischen gespeicherten MySQL-Prozeduren und gespeicherten Funktionen?

Was ist der Unterschied zwischen gespeicherten MySQL-Prozeduren und gespeicherten Funktionen?

青灯夜游
青灯夜游Original
2022-02-17 15:22:2616604Durchsuche

Unterschied: 1. Gespeicherte Funktionen haben viele Einschränkungen, während gespeicherte Prozeduren relativ wenige Einschränkungen haben. 2. Gespeicherte Funktionen geben einen und nur einen Ergebniswert an den Aufrufer zurück, während gespeicherte Prozeduren einen oder mehrere Ergebnissätze zurückgeben. Es gibt drei Parametertypen für gespeicherte Prozeduren und nur einen Parametertyp für gespeicherte Funktionen.

Was ist der Unterschied zwischen gespeicherten MySQL-Prozeduren und gespeicherten Funktionen?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

Was ist eine gespeicherte Prozedur?

Eine gespeicherte Prozedur ist eine Reihe von SQL-Anweisungen, die zum Ausführen bestimmter Funktionen in großen Datenbanksystemen verwendet werden. Sie müssen nach der ersten Kompilierung nicht erneut kompiliert werden Der Benutzer gibt den Namen der gespeicherten Prozedur und Parameter (sofern die gespeicherte Prozedur über Parameter verfügt) an, um sie auszuführen. Gespeicherte Prozeduren sind ein wichtiges Objekt in der Datenbank, und jede gut gestaltete Datenbankanwendung sollte gespeicherte Prozeduren verwenden.

Vorteile:
(1) Wiederverwendung: Gespeicherte Prozeduren können wiederverwendet werden, was die Arbeitsbelastung der Entwickler verringern kann.
(2) Effizienz verbessern: Die gespeicherte Prozedur wird bei der ersten Verwendung kompiliert. Nach der Kompilierung muss sie nicht erneut kompiliert werden, was die Effizienz verbessert.
(3) Reduzieren Sie den Netzwerkverkehr: Die gespeicherte Prozedur befindet sich auf dem Server. Beim Aufruf müssen Sie nur den Namen und die Parameter der gespeicherten Prozedur übergeben, wodurch die über das Netzwerk übertragene Datenmenge reduziert wird.
(4) Sicherheit: Parametrisierte gespeicherte Prozeduren können die SQL-Injection verhindern und auf gespeicherte Prozeduren können Berechtigungen zum Gewähren, Verweigern und Widerrufen angewendet werden.

Nachteile:
(1) Debugging-Probleme
(2) Schlechte Portabilität
(3) Schlechte Wartbarkeit

Code:

CREATE DEFINER=`root`@`%` PROCEDURE `getName`(IN `uid` int,OUT my_uname VARCHAR(255))
BEGIN
	#Routine body goes here...
select admin_name into my_uname from admin_user where id=uid;
  select my_uname;
END

Was ist eine gespeicherte Funktion?

Eine gespeicherte Funktion ist eine Reihe gespeicherter Prozeduren mit einem Funktionsnamen und Parametern und gibt eine Ergebnismenge zurück. Gespeicherte Funktionen haben eine ähnliche Struktur wie gespeicherte Prozeduren, müssen jedoch über eine Rückgabeklausel verfügen, um Ergebnisse zurückzugeben.

Code:

CREATE DEFINER=`root`@`%` FUNCTION `queryChildrenAreaInfo`(areaId INT) RETURNS varchar(4000) CHARSET utf8
BEGIN
	DECLARE sTemp VARCHAR(4000);
	DECLARE sTempChd VARCHAR(4000);
	
	SET sTemp='$';
	SET sTempChd = CAST(areaId AS CHAR);
	
	WHILE sTempChd IS NOT NULL DO
	SET sTemp= CONCAT(sTemp,',',sTempChd);
	SELECT GROUP_CONCAT(id) INTO sTempChd FROM personal_dept WHERE FIND_IN_SET(dept_parentId,sTempChd)>0;
	END WHILE;
	RETURN sTemp;
END

Der Unterschied zwischen gespeicherten Prozeduren und gespeicherten Funktionen

1. Übersicht

Gespeicherte Prozeduren und gespeicherte Funktionen werden gemeinsam als gespeicherte Routinen bezeichnet. Die Syntax der beiden ist sehr ähnlich, sie haben jedoch unterschiedliche Inhalte.

Speicherfunktionen unterliegen vielen Einschränkungen. Beispielsweise können keine temporären Tabellen verwendet werden, sondern nur Tabellenvariablen. Es gibt auch einige Funktionen, die nicht verfügbar sind usw.

Die Einschränkungen für gespeicherte Prozeduren sind relativ gering und die zu implementierenden Funktionen sind komplexer.

2. Unterschied im Rückgabewert

Die Speicherfunktion gibt nur einen Ergebniswert an den Aufrufer zurück.

Eine gespeicherte Prozedur gibt eine oder mehrere Ergebnismengen zurück (Funktionen können dies nicht), oder einfach nur, um einen Effekt oder eine Aktion zu erzielen, ohne ein Ergebnis zurückzugeben.

3. Verschiedene Aufrufmethoden
Gespeicherte Funktionen sind in SQL eingebettet und können in select aufgerufen werden, genau wie integrierte Funktionen wie cos() und sin().

4. Unterschiede in den Parametern

Die Parametertypen gespeicherter Funktionen ähneln IN-Parametern

Es gibt drei Parametertypen gespeicherter Prozeduren: IN-Parameter, OUT-Parameter, INOUT-Parameter

in: Es werden nur Daten übertragen von außen nach innen Verwendung (Wertübertragung), die ein numerischer Wert oder eine Variable

out sein kann: nur für interne Verwendung des Prozesses zulässig (es werden keine externen Daten verwendet), für externe Verwendung (Referenzübertragung: externe Daten). (wird zuerst gelöscht, bevor das Interne eingegeben wird). Kann nur Variablen sein.

Eine gespeicherte Prozedur ist eine Sammlung benutzerdefinierter SQL-Anweisungen. Benutzer können gespeicherte Prozeduren aufrufen, um Aufgaben für bestimmte Tabellen oder andere Objekte zu entwerfen.

Eine Funktion ist normalerweise eine von der Datenbank definierte Methode, die Parameter empfängt und einen Wert eines bestimmten Typs zurückgibt und keine bestimmte Benutzertabelle umfasst.

【Verwandte Empfehlung:

MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen gespeicherten MySQL-Prozeduren und gespeicherten Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Welche Datei ist MySQL FRM?Nächster Artikel:Welche Datei ist MySQL FRM?