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

Tipps zur Verwendung von Bildlaufleisten in HTML

Als wir heute das Pressemitteilungssystem von Niu ...

Detaillierte Erklärung der Verwendung von overflow:auto

Bevor ich mit dem Haupttext beginne, werde ich ei...

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung Wenn vor dem Start des Docker-Conta...

Font Treasure House 50 exquisite kostenlose englische Schriftartenressourcen Teil 1

Designer verfügen über eine eigene Schriftartenbi...

Daten in der Layui-Tabellenzeile dynamisch bearbeiten

Inhaltsverzeichnis Vorwort Stil Funktion Beschrei...

Dateifreigabe zwischen Ubuntu und Windows unter VMware

In diesem Artikel wird die Methode zum Teilen von...

Detaillierte Analyse von GUID-Anzeigeproblemen in Mongodb

Finden Sie das Problem Ich habe kürzlich den Spei...

Linux Cron geplante Ausführung von PHP-Code mit Parametern

1. Verwenden Sie zur Ausführung weiterhin ein PHP...

Detaillierte Erläuterung der Nginx-Timeout-Konfiguration

Ich habe kürzlich in einem Projekt nginx und im B...