Analyse, wie eine gespeicherte Prozedur in MySQL erstellt wird, um einer Datentabelle neue Felder hinzuzufügen

Analyse, wie eine gespeicherte Prozedur in MySQL erstellt wird, um einer Datentabelle neue Felder hinzuzufügen

Dieser Artikel beschreibt anhand eines Beispiels, wie Sie in MySQL eine gespeicherte Prozedur erstellen, um einer Datentabelle neue Felder hinzuzufügen. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

brauchen:

Ein neues Feld zu einer Tabelle in einer Datenbank hinzufügen (wenn das Feld bereits existiert, wird keine Operation ausgeführt; wenn das Feld nicht existiert, wird ein neues Feld hinzugefügt)

Ich habe lange nach Baidu gesucht, aber es gab kein Beispiel, das die Anforderungen erfüllte. Ich konnte nur darauf verweisen und es selbst herausfinden. Schließlich habe ich es herausgefunden. Im Folgenden sind die Änderungen mehrerer Versionen aufgeführt.

Erste Ausgabe:

TRENNUNGSZEICHEN $$
PROZEDUR ERSTELLEN insert_column()
BEGINNEN
WENN NICHT EXISTIERT (WÄHLEN SIE 1 AUS information_schema.columns
WO table_schema='ltivalley' UND table_name='t_luck'
UND column_name='sss' ) DANN
alter table ltivalley.t_luck add sss varchar(255) not Null;
Ende wenn;
ENDE
$$
TRENNUNGSZEICHEN ;

Diese gespeicherte Prozedur kann der Tabelle t_luck in der Datenbank ltivalley ein neues SSS-Feld hinzufügen, sie ist jedoch totcodiert und weist keine Flexibilität auf, ist also nutzlos!

Zweite Ausgabe:

TRENNUNGSZEICHEN $$
PROZEDUR ERSTELLEN insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255))
setze @sql_1 = concat("WENN NICHT EXISTIERT(SELECT 1 FROM
information_schema.columns WHERE table_schema=",dbname,"
UND Tabellenname=", tbname" UND Spaltenname=", colname,")
DANN
Tabelle ändern ",dbname,".,tbname," hinzufügen ",colname,"
varchar(255) nicht null;
Ende, wenn;");
Anweisung VORBEREITEN VON @sql_1;
Anweisung ausführen;
DEALLOCATE PREPARE-Anweisung;
ENDE
$$
TRENNUNGSZEICHEN ;

Es gibt kein Problem beim Erstellen einer gespeicherten Prozedur, aber beim Aufrufen tritt ein Fehler auf, der einen Fehler bei „IF“ meldet. Der Grund dafür ist, dass IF in MySQL nur in gespeicherten Prozeduren vorhanden sein kann. Die Verwendung von EXECUTE stmt zum Ausführen hier ist gleichbedeutend damit, die if-Anweisung in der gespeicherten Prozedur nicht auszuführen, sodass ein Fehler gemeldet wird und sie nicht ausgeführt werden kann! Es ist also nutzlos!

Dritte Ausgabe

TRENNUNGSZEICHEN $$
PROZEDUR ERSTELLEN insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255))
BEGINNEN
SET @selec=CONCAT('SELECT 1 FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"');
VORBEREITEN von selec von @selec;
SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)');
VORBEREITEN von addcol von @addcol;
WENN NICHT EXISTIERT (AUSFÜHREN auswählen;) DANN
AUSFÜHREN addcol;
ENDE, WENN;
ENDE
$$
TRENNUNGSZEICHEN ;

Gespeicherte Prozedur kann nicht erstellt werden, da die EXECUTE-Select-Anweisung aus unbekannten Gründen nicht in IF NOT EXISTS() ausgeführt werden kann. Es ist also nutzlos!

Ultimative Ausgabe

DROP-VERFAHREN, WENN EXISTIERT: insert_column;
TRENNUNGSZEICHEN $$
PROZEDUR ERSTELLEN insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255))
BEGINNEN
setze @iscolexists = 0;
SET @selec=CONCAT('SELECT count(*) into @iscolexists FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"');
VORBEREITEN von selec von @selec;
AUSFÜHREN auswählen;
DEALLOCATE PREPARE auswählen;
SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)');
VORBEREITEN von addcol von @addcol;
WENN(@iscolexists=0)DANN
AUSFÜHREN addcol;
ENDE, WENN;
ENDE
$$
TRENNUNGSZEICHEN ;

Um das Endergebnis zu erhalten, führen Sie zuerst EXECUTE selec aus und speichern das Ergebnis in einer Variablen @iscolexists . Beurteilen Sie dann den Wert von @iscolexists in IF() und führen Sie die entsprechenden Operationen aus. Verfügbar!

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:
  • Einstellen der Engine MyISAM/InnoDB beim Erstellen einer Datentabelle in MySQL
  • Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen
  • Anzeigen, Erstellen und Ändern des Kodierungsformats von Datenbanken und Datentabellen in MySQL
  • Detaillierte Anweisungen und Syntax zum Erstellen und Löschen von Tabellen in MySQL
  • Erstellen Sie einen Datentabellen-Instanzcode auf Mysql
  • So erstellen Sie schnell eine Testdatentabelle mit 8 Millionen Einträgen in MySQL

<<:  So führen Sie Befehle auf einem Remote-Linux-System über SSH aus

>>:  Eine kurze Diskussion zum Erstellen eines Clusters in nodejs

Artikel empfehlen

Beispielcode zur Trennung von Front-End und Back-End mit FastApi+Vue+LayUI

Inhaltsverzeichnis Vorwort Projektdesign hinteres...

Vue verwendet OSS zum Hochladen von Bildern oder Anhängen

Verwenden Sie OSS, um Bilder oder Anhänge in ein ...

Sehen Sie sich den Befehl zum Ändern der MySQL-Tabellenstruktur an

Kurzbeschreibung Der Editor hat häufig Probleme m...

Beispiel-Tutorial für geplante MySQL-Aufgaben

Vorwort Seit MySQL 5.1.6 wurde eine einzigartige ...

Verwendung von Markierungs-Tags im CSS-Listenmodell

In diesem Artikel werden hauptsächlich die Stilat...

So implementieren Sie einen einfachen HTML-Videoplayer

Dieser Artikel stellt die Methode zur Implementie...

So installieren Sie MySQL in Docker

Ich habe kürzlich Django bereitgestellt und wollt...

Python schreibt die Ausgabe in den CSV-Vorgang

Wie unten dargestellt: def test_write(selbst): Fe...

Analyse der allgemeinen Konfigurationsmethoden für virtuelle Hosts von Apache

1. Installation und Konfiguration des Apache-Serv...

Schreiben Sie einen formellen Blog mit XHTML CSS

Der vollständige Name von Blog sollte Weblog sein,...

Implementierung der Docker-Bereitstellung von Django+Mysql+Redis+Gunicorn+Nginx

I. Einleitung Die Docker-Technologie erfreut sich...