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 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:
|
<<: So führen Sie Befehle auf einem Remote-Linux-System über SSH aus
>>: Eine kurze Diskussion zum Erstellen eines Clusters in nodejs
Inhaltsverzeichnis Vorwort Projektdesign hinteres...
Verwenden Sie OSS, um Bilder oder Anhänge in ein ...
Kurzbeschreibung Der Editor hat häufig Probleme m...
Installieren Sie die entpackte Version der MySql-...
Vorwort Seit MySQL 5.1.6 wurde eine einzigartige ...
In diesem Artikel werden hauptsächlich die Stilat...
Dieser Artikel stellt die Methode zur Implementie...
Ich habe kürzlich Django bereitgestellt und wollt...
Wie unten dargestellt: def test_write(selbst): Fe...
1. Installation und Konfiguration des Apache-Serv...
Was ist ein Primärschlüssel? Ein Primärschlüssel ...
Der vollständige Name von Blog sollte Weblog sein,...
Die heute zu implementierende Funktion ist die fo...
I. Einleitung Die Docker-Technologie erfreut sich...
Was ist das? Spring Boot ist ein Unterprojekt der...