MySQL: Bedingtes Hinzufügen von Spalten mit ALTER TABLE IF NOT EXISTS
In MySQL erfordert das Ändern einer Tabellenstruktur häufig das Hinzufügen oder Entfernen von Spalten. Allerdings können solche Vorgänge fehlschlagen, wenn die angegebene Spalte bereits vorhanden ist oder nicht. Um dieses Szenario anzugehen, bietet MySQL mithilfe der ALTER TABLE IF NOT EXISTS-Syntax eine bedingte Möglichkeit, eine Spalte nur dann hinzuzufügen, wenn sie nicht vorhanden ist.
Problemstellung
Bedenken Sie die folgende Aufgabe: Ändern einer Tabelle mit dem Namen „settings“, um eine Spalte mit dem Namen „multi_user“ als TINYINT(1) mit dem Standardwert 1 hinzuzufügen, jedoch nur, wenn die Spalte dies nicht bereits tut existieren. Viele Versuche mit unterschiedlichen Ansätzen, wie zum Beispiel der ADD COLUMN IF NOT EXISTS-Syntax oder einer gespeicherten Prozedur mit einer bedingten IF-Anweisung, sind fehlgeschlagen.
Lösung
Bedingtes Hinzufügen Um eine Spalte mit ALTER TABLE IF NOT EXISTS zu erstellen, führen Sie die folgenden Schritte aus:
IF NOT EXISTS( SELECT NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'settings' AND table_schema = 'database_name' AND column_name = 'multi_user') THEN
ALTER TABLE `settings` ADD `multi_user` int(1) NOT NULL default '0';
Beispiel
Hier ist ein Beispiel für die gespeicherte Prozedur, die Sie erstellen können:
DELIMITER $$ CREATE PROCEDURE Alter_Table() BEGIN IF NOT EXISTS( SELECT NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'settings' AND table_schema = 'database_name' AND column_name = 'multi_user') THEN ALTER TABLE `settings` ADD `multi_user` int(1) NOT NULL default '0'; END IF; END $$ DELIMITER ;
Diese Prozedur prüft, ob die Spalte „multi_user“ in der Einstellungstabelle vorhanden ist. Wenn sie nicht vorhanden ist, wird die Spalte hinzugefügt. Andernfalls wird der Vorgang übersprungen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit „ALTER TABLE' bedingt eine Spalte zu einer MySQL-Tabelle hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!