# MySQL - Neue Spalten hinzufügen, wenn sie noch nicht da sind...



## xMen (1. Dezember 2004)

*MySQL : ADD COLUMN mit Bedingung -> [ IF NOT EXIST ]*

Hallo MySQL-Freunde,

kurz eine Frage, die mir die Referenz nicht beantworten kann oder ich habe die korrekte Stelle noch nicht gefunden  . Ich arbeite mit MySQL 4.0.18 und möchte über TransactSQL in eine Tabelle eine neues Feld einfügen, *aber nur dann, wenn es noch nicht existiert. * Also z. B. so:


```
ALTER TABLE myTable
ADD COLUMN myNewField [ IF NOT EXIST ]
```
Diese Bedingung - IF NOT EXIST - existiert ja beim Kommande "CREATE TABLE". Für Spalten habe ich das aber bisher nicht finden können.

Hat jemand eine Idee, wie ich das lösen kann?


----------



## redlama (1. Dezember 2004)

Das Problem hatte ich auch schon mal.
Habe es mit PHP gelöst.
Zuerst habe ich einen Zähler angelegt, der den Wert 0 hat.
Dann habe ich eine "show fields from myTable" abgesetzt.
Die Ergebnisse habe ich dann überprüft, ob sie "myNewField" heißen.
Wenn ja Zähler auf 1, wenn nicht, nichts tun.
Wenn am Ende der Zähler immer noch 0 ist, dann das "Alter Table", ansonsten gibt's die Spalte halt schon.

redlama


----------



## xMen (1. Dezember 2004)

Hallo redlama,

vielen Dank für Deine Antwort. Einen ähnlichen Ansatz hatte ich auch schon, wollte aber wissen, ob es dafür eine "elegantere" Lösung gibt...


----------



## mage (1. Dezember 2004)

Was bekommst du den für eine Fehlermeldung, wenn das Feld schon vorhanden ist ?
Ich schätze, es sollte nichts mit den Daten passieren, daher könntest du vom Programm bei die entsprechende Fehlernummer ignorieren lassen.


----------



## xMen (2. Dezember 2004)

Hallo mage,

ich habe es noch nicht ausprobiert, welche Fehlermeldung kommt, wenn das Feld bereits existiert. Ich könnte das Problem natürlich über einen "try - catch - except"-Block abfragen. Der Weg scheint mir jedoch nicht gerade "professionell" zu sein...


----------



## mage (2. Dezember 2004)

Der sauberste Weg ist zu prüfen mit einer Abfrage auf die richtige Systemtabelle oder per PHP, ob dieses Feld schon vorhanden ist. Das mag aber nicht die Perfomanteste Lösung sein.


----------

