MySQL: Wie erstelle ich eine Spalte, wenn sie nicht existiert?
13
Ich versuche nur dann, eine Spalte für meine Tabelle zu erstellen, wenn diese nicht vorhanden ist. Ich habe viel recherchiert, konnte aber noch keine Lösung finden.
Ist es wirklich möglich, eine Spalte bedingt zu erstellen?
Ich bin neugierig ... Was ist falsch daran, die Änderung nur bei einem Fehler fehlschlagen zu lassen, wenn die Spalte bereits vorhanden ist?
Derek Downey
Eigentlich muss ich meinem Client eine SQL-Datei bereitstellen, die alle Abfragen im Zusammenhang mit Änderungen der DB-Struktur enthält. Ich kann ihnen nicht die ganze Datenbank senden. Ich möchte ihnen nur DB-Änderungen senden. Diese SQL-Datei enthält viele weitere Abfragen. Wenn diese Abfrage zum Erstellen von Spalten fehlschlägt, schlagen alle Abfragen fehl. Deshalb möchte ich if-Bedingung verwenden, um eine Spalte zu erstellen.
zzzzz
Wenn Ihre Datenbank dies unterstützt, können Sie einen Trigger verwenden. VOR EINFÜGEN.
Cybernard
Antworten:
7
MySQL ALTER TABLEhat keine IF EXISTSSpezifikation.
Sie können Folgendes mithilfe eines gespeicherten Prozesses oder einer Programmiersprache tun, wenn Sie dies regelmäßig tun müssen:
Pseudocode:
Finden Sie mithilfe der folgenden SQL heraus, ob die Spalte vorhanden ist:
AUSWÄHLEN column_name
VON INFORMATION_SCHEMA. COLUMNS
WHERE TABLE_SCHEMA= [Datenbankname] AND TABLE_NAME= [Tabellenname];
Wenn die obige Abfrage ein Ergebnis zurückgibt, bedeutet dies, dass die Spalte vorhanden ist. Andernfalls können Sie die Spalte erstellen.
In MySQL / MariaDB wird bei Verwendung dieser Abfrage ein Fehler angezeigt, der besagt, dass dieser column_namenicht vorhanden ist. Ich formulierte die Anfrage neu zu:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad
2
Für eine einfache 0 oder 1 Antwort auf MySQL und (glaube ich) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
Piojo
13
Existiert jetzt tatsächlich für Maria DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Bonus, es funktioniert auch für MODIFY
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Antworten:
MySQL
ALTER TABLE
hat keineIF EXISTS
Spezifikation.Sie können Folgendes mithilfe eines gespeicherten Prozesses oder einer Programmiersprache tun, wenn Sie dies regelmäßig tun müssen:
Pseudocode:
Finden Sie mithilfe der folgenden SQL heraus, ob die Spalte vorhanden ist:
AUSWÄHLEN
column_name
VONINFORMATION_SCHEMA
.COLUMNS
WHERETABLE_SCHEMA
= [Datenbankname] ANDTABLE_NAME
= [Tabellenname];Wenn die obige Abfrage ein Ergebnis zurückgibt, bedeutet dies, dass die Spalte vorhanden ist. Andernfalls können Sie die Spalte erstellen.
quelle
column_name
nicht vorhanden ist. Ich formulierte die Anfrage neu zu:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
Existiert jetzt tatsächlich für Maria DB 10.219
Bonus, es funktioniert auch für MODIFY
quelle
Sie können diese Lösung verwenden, die bereits in einem anderen StackOverFlow-Beitrag erwähnt wurde: (Ref.: Https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE, um eine Spalte hinzuzufügen, wenn sie nicht vorhanden ist:
quelle
Das unten hat bei mir funktioniert:
quelle