Detaillierte Erläuterung der gespeicherten Prozedur „MySql View Trigger“

Detaillierte Erläuterung der gespeicherten Prozedur „MySql View Trigger“

Sicht:

Wenn eine temporäre Tabelle wiederholt verwendet wird, können Sie ihr einen Alias ​​zuweisen, um die zukünftige Verwendung zu erleichtern. Sie können dann eine Ansicht erstellen, und der Alias ​​ist der Name der Ansicht. Eine Ansicht ist lediglich eine virtuelle Tabelle, deren Daten dynamisch aus der physischen Tabelle gelesen werden. Änderungen an der physischen Tabelle führen daher zu einer Änderung der Ansicht.

erstellen:

Ansicht v1 als SQL erstellen

Beispiel: Erstellen Sie Ansicht v1 als „select * from student where sid<10“

Wenn Sie nach der Erstellung das MySQL-Terminal verwenden, können Sie eine Tabelle mit dem Namen v1 sehen. Wenn Sie Navicate verwenden, können Sie sehen, dass in der Ansicht eine Ansicht mit dem Namen v1 generiert wird.

Bei erneuter Verwendung können Sie direkt die Abfragetabellenmethode verwenden. Beispiel: select * from v1

Änderung: Sie können die SQL-Anweisungen nur in der Ansicht ändern.

Ansicht ändern, Ansichtsname als SQL

löschen:

Drop-Ansicht, Ansichtsname

auslösen:

Beim Hinzufügen, Löschen, Ändern oder Überprüfen einer Tabelle (vorher, nachher oder danach) können Sie Trigger verwenden, um das zugehörige Verhalten anzupassen.

Ändern Sie das Terminator-Trennzeichen in der SQL-Anweisung

vorher nachher

--Trennzeichen //
  
-- before oder after definiert die Operation vor oder nach der Operation (Einfügen oder anderes) -- on stellt die Triggeroperation dar, nachdem die Operation in dieser Tabelle ausgeführt wurde -- CREATE TRIGGER t1 BEFORE INSERT für Lehrer für JEDE Zeile
--BEGINNEN
--INSERT in Kurs(cname) VALUES('Ultraman');
--ENDE //
--Trennzeichen;
 
 
-- in Lehrer(tname) einfügen VALUES('triggertest111')
--
--Trennzeichen // 
-- ERSTELLEN SIE TRIGGER t1 VOR DEM INSERT für JEDE Zeile des Studenten
--BEGINNEN
-- INSERT in Lehrer(tname) VALUES('Ultraman');
--ENDE //
--Trennzeichen;
 
 
-- einfügen in Student (Geschlecht, Sname, Klassen-ID) VALUES('Student', '1. Klasse 111', 3);
-- Trigger löschen -- Trigger t1 löschen;
 
 
-- NEW und OLD stellen neue und alte Daten dar, um sie konsistent zu machen -- Trennzeichen //
-- Erstellen Sie TRIGGER t1 VOR dem Einfügen für den Studenten für jede Zeile
--BEGINNEN
 
--Hier gibt „new“ die neu eingefügten Daten an, und „old“ wird normalerweise zum Löschen verwendet – insert into teacher(tname) VALUES(NEW.sname);
-- Ende //
--Trennzeichen;
einfügen in Student (Geschlecht, Sname, Klassen-ID) VALUES ('Student', 'Studentenname', 3);

Gespeicherte Prozedur:

Im Wesentlichen handelt es sich dabei um eine Sammlung von SQL-Anweisungen, und dieser Sammlung wird dann ein Alias ​​zugewiesen. Der Unterschied zwischen einer Ansicht und einer Tabelle besteht darin, dass eine Ansicht eine SQL-Abfrageanweisung ist, die als Tabelle behandelt wird.

Weg:

1 msyql----gespeicherte Prozedur für Programmaufrufe

2 msyql --- Führen Sie keine gespeicherten Prozeduren aus, das Programm schreibt SQL

3 mysql - keine gespeicherten Prozeduren ausführen, Programm schreibt Klassen und Objekte (in SQL-Anweisungen konvertieren)

Erstellungsmethode:

-- 1 Erstellen Sie eine gespeicherte Prozedur ohne Parameter
--Trennzeichen //
-- PROZEDUR p1() erstellen
--BEGINNEN
-- wähle * aus dem Studenten;
-- in Lehrer(tname) einfügen VALUES('cccc');
-- Ende //
--Trennzeichen;

-- Aufrufen einer gespeicherten Prozedur

 rufe p2(5,2) auf<br data-filtered="gefiltert"><br data-filtered="gefiltert"><em id="__mceDel"> cursor.callproc('p1',(5,2)) in pymysql</em>
-- 2 mit Parameter im Parameter -- Trennzeichen //
-- erstellen Sie das VERFAHREN p2(
-- in n1 int,
-- in n2 int
-- )
--BEGINNEN
--Wählen Sie * vom Studenten aus, wobei sid<n1;
-- 
-- Ende //<br data-filtered="gefiltert"><br data-filtered="gefiltert"> rufe p2(5,2) auf<br data-filtered="gefiltert"><br data-filtered="gefiltert"><em id="__mceDel"> cursor.callproc('p1',(5,2)) in pymysql</em>
-- 3 out-Parameter Wenn Sie out als Parameter in einer gespeicherten Prozedur verwenden, kann die Variable extern aufgerufen werden. -- In der gespeicherten Prozedur gibt es keine Rückgabe. Wenn Sie eine Variable extern aufrufen möchten, müssen Sie out verwenden.
--Trennzeichen //
-- erstellen Sie das VERFAHREN p3(
-- in n1 int,
--out n2 int
-- )
--BEGINNEN
--set n2=444444;
--Wählen Sie * vom Studenten aus, wobei sid<n1;
-- 
-- Ende //
--
--Trennzeichen;
--
-- set @v1=999 ist gleichbedeutend mit dem Erstellen einer Variablen auf Sitzungsebene -- set @v1=999; 
-- rufe p3(5,@v1) auf;
-- select @v1; #Indem Sie eine Variable übergeben und diese dann überwachen, können Sie überwachen, ob die gespeicherte Prozedur erfolgreich ausgeführt wird -- in pymsyql --  
-- Cursor.callproc('p3',(5,2))
-- r2=cursor.fetchall()
-- drucken(r2)
--
-- Die gespeicherte Prozedur enthält das Schlüsselwort out. Wenn Sie den Rückgabewert erhalten möchten, cursor.execute('select @_p3_0,@_p3_1')
-- # Unter ihnen ist „select @_p3_0,@_p3_1“ eine feste Schreibmethode. Wählen Sie „@_stored procedure name_input parameter index position“ – cursor.execute („select @_p3_0,@_p3_1“)
-- r3=cursor.fetchall()
-- drucken(r3)
--

Warum müssen wir den zurückgegebenen Wert fälschen, wenn wir einen Ergebnissatz haben?

Da die gespeicherte Prozedur mehrere SQL-Anweisungen enthält, ist es unmöglich zu bestimmen, ob alle SQL-Anweisungen erfolgreich ausgeführt werden können. Mit der Out-Funktion lässt sich ermitteln, ob die SQL-Anweisung erfolgreich ausgeführt wurde.

Wenn beispielsweise Erfolg mit 1, Teilerfolg mit 2 und Misserfolg mit 3 markiert wird

Transaktionen in gespeicherten Prozeduren:

Transaktionen:

Dies wird als atomare Operation bezeichnet. DML-Anweisungen (Einfügen, Aktualisieren, Löschen) werden zusammen abgeschlossen und Transaktionen beziehen sich nur auf DML-Anweisungen, oder nur DML verfügt über Transaktionen.

Merkmale der Transaktionen:

Atomarität A: Eine Transaktion ist die kleinste Einheit und kann nicht geteilt werden.

Konsistenz C: Transaktionen erfordern, dass alle DML-Anweisungen bei ihrer Ausführung erfolgreich sein oder fehlschlagen müssen.

Isolation I: Es besteht eine Isolation zwischen Transaktion A und Transaktion B.

Persistenz D: Dies ist die Garantie der Transaktion und das Zeichen für das Ende der Transaktion (die Daten im Speicher werden vollständig auf der Festplatte gespeichert).

Transaktionsschlüsselwörter:

Transaktion starten: Transaktion starten

Ende der Transaktion: Transaktion beenden

Transaktion festschreiben

Rollback-Transaktion

Grundlegende Vorgänge bei Transaktionen

Trennzeichen //
 Prozedur p5 erstellen(
 in n1 int,
 aus n2 int
 )
 beginnen
 1 Anweisung, wenn eine abnormale Ausführung auftritt (
   setze n2=1;
   zurückrollen;
  )
  2 Transaktion starten Käuferkonto - 100
        Verkaufskonto +100
        begehen
  3 Ende des Satzes n2=2
   Ende //
   
   Trennzeichen ;
   
 Auf diese Weise können Sie Fehler durch n2 erkennen und zurücksetzen. Nachfolgend finden Sie den detaillierten Code-Trennzeichen //
  Prozedur p6 erstellen(
  Ausgabecode TINYINT
  )
  beginnen
   Geben Sie an, dass beim Auftreten einer SQLException die folgende Operation ausgeführt wird: DECLARE exit HANDLER for SQLEXCEPTION
   beginnen
    --Fehler
      Code = 1 setzen;
      zurückrollen;
   Ende;
   TRANSAKTION STARTEN;
       aus tb1 löschen;
       einfügen in tb2(Name)Werte('slkdjf')
   begehen;
   ---Erfolg
   Code = 2
   Ende //
Trennzeichen ;

Verwendung von Cursorn in gespeicherten Prozeduren:

Trennzeichen //
Prozedur p7() erstellen
 beginnen
    Deklarieren Sie row_id int;
     Deklarieren Sie row_num int;
     Deklariere „erledigt“ in DEFAULT FALSE;
     Deklarieren Sie einen Cursor, deklarieren Sie den Cursor my_cursor, um „ID, Nummer“ aus A auszuwählen.
     Deklarieren Sie, dass done auf True gesetzt wird, wenn keine Daten vorhanden sind.
     Deklarieren Sie den Continue-Handler für nicht gefundene Sätze „done=True“.
     
     
     öffne my_cursor; öffne Cursor xxoo; LOOP starte Schleife mit dem Namen xxoo
            hole my_cursor in row_id,row_num;
              wenn fertig, dann, wenn fertig True ist, verlasse die Schleife, verlasse xxoo;
              Ende wenn;
              setze Temperatur=Zeilen-ID+Zeilennummer;
       einfügen in B(Zahl)VALUES(temp);
            Schleife beenden xxoo; Schleife schließen, my_cursor schließen;
    Ende //
     
Trennzeichen ;
 
 
Der obige Code wird in Python konvertiert 
für row_id,row_num in my_cursor:
  Prüfen Sie, ob sich Daten in der Schleife befinden. Wenn nicht, brechen Sie ab.
    brechen
    einfügen in B(num) Werte(row_id+row_num)

Führen Sie SQL dynamisch aus und platzieren Sie SQL-Injection auf Datenbankebene:

Trennzeichen \\
Prozedur p6 erstellen(
 in nid int)
 beginnen
  1 Vorkompilieren (Vorabprüfung) der Legitimität einer bestimmten SQL-Anweisung 2 sql=format tpl+arg
    3 SQL ausführen
 
  setze @nid=nid
    bereiten Sie die Produktion aus „Select * from student where sid>?“ vor.
    AUSFÜHREN von prod mit @nid;
    Freigabe aufheben, Produktion vorbereiten
  Ende \\
  Trennzeichen ;

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • MySQL-Serie fünf Ansichten, gespeicherte Funktionen, gespeicherte Prozeduren, Trigger
  • Tutorial zu grundlegenden Funktionen und Triggern in gespeicherten MySQL-Prozeduren
  • Anwendungsanalyse basierend auf MySQL-Transaktionen, Ansichten, gespeicherten Prozeduren und Triggern
  • Erfahren Sie mehr über den Ereignisplaner EVENT in MySQL
  • Einführung in die Verwendung des MySQL-Ereignisplaners
  • Erste Schritte mit gespeicherten Prozeduren, Triggern und Ereignisplanern in MySQL

<<:  So verbinden Sie Xshell5 mit Linux in einer virtuellen Maschine und beheben den Fehler

>>:  JS implementiert die zufällige Generierung von Bestätigungscodes

Artikel empfehlen

Beschreibung des hr-Tags in verschiedenen Browsern

Im Allgemeinen treffen wir die Personalabteilung n...

HTML-Multimediaanwendung: Einfügen von Flash-Animationen und Musik in Webseiten

1. Anwendung von Multimedia in HTML_Flash-Animati...

So verwenden Sie Docker Compose zum Erstellen eines FastDFS-Dateiservers

Im vorherigen Artikel wurde ein ausführliches Bei...

Mysql-Fehler: Lösung für zu viele Verbindungen

Zu viele Verbindungen zur MySQL-Datenbank Dieser ...

So verwenden Sie JSX in Vue

Was ist JSX JSX ist eine Syntaxerweiterung von Ja...

Binäre Typoperationen in MySQL

Dieser Artikel stellt hauptsächlich die binären O...

Eine kurze Diskussion über den Spaß von :focus-within in CSS

Ich glaube, einige Leute haben dieses Bild gesehe...

Nodejs-Fehlerbehandlungsprozessaufzeichnung

In diesem Artikel wird der Verbindungsfehler ECON...

Tutorial zur Installation der entpackten Version von mysql5.7 auf CentOS 7

1. Entpacken Sie das komprimierte MySQL-Paket in ...

So fragen Sie doppelte Daten in einer MySQL-Tabelle ab

INSERT INTO hk_test(Benutzername, Passwort) VALUE...

MySQL-Platzhalter (erweiterte SQL-Filterung)

Inhaltsverzeichnis Lassen Sie uns zunächst kurz P...