Dieser Artikel erläutert anhand von Beispielen die Prinzipien und die Verwendung von gespeicherten MySQL-Prozeduren. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Eine gespeicherte Prozedur enthält eine Reihe ausführbarer SQL-Anweisungen. Die gespeicherte Prozedur wird in MySQL gespeichert und kann durch Aufrufen ihres Namens ausgeführt werden. Vorteile gespeicherter Prozeduren
Nachteile gespeicherter Prozeduren
Gespeicherte Prozedur ohne Parameter Trennzeichen // Prozedur p1() erstellen BEGINNEN Wählen Sie * aus Blog; INSERT in Blog (Name, Sub_Time) Werte ("xxx", jetzt (); ENDE // Trennzeichen ; #Rufen Sie p1() in MySQL auf #Rufen Sie cursor.callproc('p1') basierend auf pymysql in Python auf drucken(cursor.fetchall()) Gespeicherte Prozeduren mit Parametern Für gespeicherte Prozeduren können Sie Parameter erhalten, die in drei Kategorien unterteilt sind:
Gespeicherte Prozedur mit in mysql> wähle * aus emp; +----+----------+-----+--------+ | ID | Name | Alter | dep_id | +----+----------+-----+--------+ | 1 | zhangsan | 18 | 1 | | 2 | lisi | 19 | 1 | | 3 | egon | 20 | 2 | | 5 | Alex | 18 | 2 | +----+----------+-----+--------+ 4 Reihen im Satz (0,30 Sek.) mysql> Trennzeichen // mysql> Prozedur p2 erstellen (in n1 int, in n2 int) -> beginnen -> wähle * aus emp, wobei ID >n1 und ID <n2; -> Ende // Abfrage OK, 0 Zeilen betroffen (0,28 Sek.) mysql> Trennzeichen; mysql> rufe p2(1,3) auf -> ; +----+------+-----+--------+ | ID | Name | Alter | dep_id | +----+------+-----+--------+ | 2 | lisi | 19 | 1 | +----+------+-----+--------+ 1 Zeile im Satz (0,07 Sek.) Abfrage OK, 0 Zeilen betroffen (0,07 Sek.) #Rufen Sie cursor.callproc('p2',(1,3)) basierend auf pymysql in Python auf drucken(cursor.fetchall()) Ohne mysql> Trennzeichen // mysql> Prozedur p3 erstellen (in n1 int, out res int) -> beginnen -> wähle * aus emp, wo ID >n1; -> setze res=1; -> Ende // Abfrage OK, 0 Zeilen betroffen (0,28 Sek.) mysql> Trennzeichen; mysql> setze @res=0; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> rufe p3(3,@res) auf; +----+------+-----+--------+ | ID | Name | Alter | dep_id | +----+------+-----+--------+ | 5 | Alex | 18 | 2 | +----+------+-----+--------+ 1 Zeile im Satz (0,00 Sek.) Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> wähle @res; +------+ | @res | +------+ | 1 | +------+ 1 Zeile im Satz (0,00 Sek.) #Rufen Sie cursor.callproc('p3',(3,0)) basierend auf pymysql in Python auf. #0 ist gleichbedeutend mit set @res=0 print(cursor.fetchall()) #Frage die Abfrageergebnisse von select cursor.execute('select @_p3_0,@_p3_1;') ab. #@p3_0 stellt den ersten Parameter dar, @p3_1 stellt den zweiten Parameter dar, d. h. den Rückgabewert print(cursor.fetchall()) Beispiel mit inout Trennzeichen // Prozedur p4 erstellen( Ein/Aus n1 int ) BEGINNEN Wählen Sie * aus dem Blog, wo ID > n1; setze n1 = 1; ENDE // Trennzeichen ; #Aufruf set @x=3 in mysql; rufe p4(@x) auf; wähle @x; #Rufen Sie cursor.callproc('p4',(3,)) basierend auf pymysql in Python auf print(cursor.fetchall()) #Fragen Sie die Abfrageergebnisse von select cursor.execute('select @_p4_0;') ab. drucken(cursor.fetchall()) Transaktionen #Einführungstrennzeichen // Prozedur p4 erstellen( Ausgangsstatus int ) BEGINNEN 1. Deklarieren Sie, dass bei Auftreten einer Ausnahme { ausgeführt wird. Status = 1 setzen; zurückrollen; } Transaktion starten -- 100 von Qin Bings Konto abziehen -- 90 zu Fang Shaoweis Konto hinzufügen -- Zhang Gens Konto plus 10 begehen; Endset-Status = 2; ENDE // Trennzeichen ; #Trennzeichen implementieren // Erstellen Sie das Verfahren p5 ( AUS p_return_code tinyint ) BEGINNEN DECLARE-Exit-Handler für SQLexception BEGINNEN -- FEHLER setze p_return_code = 1; zurückrollen; ENDE; DECLARE-Exit-Handler für SQLwarning BEGINNEN --WARNUNG setze p_return_code = 2; zurückrollen; ENDE; TRANSAKTION STARTEN; LÖSCHEN aus tb1; #Ausführung fehlgeschlagen, Einfügen in Blog (Name, Sub_Time) Werte ('yyy', jetzt ()); BEGEHEN; --ERFOLG setze p_return_code = 0; #0 steht für erfolgreiche Ausführung END // Trennzeichen ; #Rufen Sie die gespeicherte Prozedur in MySQL auf. Set @res=123; rufe p5(@res) auf; wähle @res; #Aufrufen gespeicherter Prozeduren basierend auf pymysql in Python cursor.callproc('p5',(123,)) print(cursor.fetchall()) #Fragen Sie die Abfrageergebnisse von select cursor.execute('select @_p5_0;') ab. drucken(cursor.fetchall()) Ausführung gespeicherter Prozeduren In MySQL ausführen -- proc_name() ohne Parameter aufrufen -- Mit Parametern, alles in rufe proc_name(1,2) auf - Es gibt Parameter, in, out, inout setze @t1=0; setze @t2=3; rufe proc_name(1,2,@t1,@t2) auf In pymsql ausführen #!/usr/bin/env python # -*- Kodierung:utf-8 -*- pymysql importieren conn = pymysql.connect(Host='127.0.0.1', Port=3306, Benutzer='root', Passwort='123', Datenbank='t1') Cursor = Verbindung.Cursor(Cursor=pymysql.cursors.DictCursor) # Führen Sie die gespeicherte Prozedur cursor.callproc('p1', args=(1, 22, 3, 4)) aus. # Nach der Ausführung und Speicherung die Parameter abrufen cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3") Ergebnis = Cursor.fetchall() conn.commit() cursor.schließen() conn.close() drucken(Ergebnis) Löschen einer gespeicherten Prozedur Prozedur proc_name löschen; Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „Kenntnisse zu gespeicherten MySQL-Prozeduren“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „Kenntnisse zu MySQL-Protokollvorgängen“, „Zusammenfassung der Kenntnisse zu MySQL-Transaktionsvorgängen“ und „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
>>: Vue-Routing - Methode zum Sprung relativer Pfade
Ende letzten Jahres habe ich im Dualsystem meines...
1. Überlauf Überlauf ist Überlauf (Container). We...
In MySQL gibt es eine Funktion namens „group_conc...
Vorwort nginx verwendet ein Multiprozessmodell. W...
Frage Vor kurzem bin ich auf die Anforderung gest...
Ubuntu 18.04, andere Versionen von Ubuntu Frage: ...
Hallo zusammen, ich bin Tony, ein Lehrer, der nur...
Ich bin seit langer Zeit depressiv, warum? Vor ein...
In diesem Artikel sind einige sogenannte Spezifik...
Ich habe heute gerade Mybatis gelernt und einige ...
Nach der Installation von Docker gibt es normaler...
Inhaltsverzeichnis Code: Auffüllen: Zusammenfasse...
Vorwort Beim Schreiben von Code stoßen wir gelege...
Inhaltsverzeichnis Einstellungen für den abgesich...
In der Open-Source-Umfrage von Black Duck aus dem...