Tanelorn.net
Medien & Phantastik => Multimedia => Multimedia - Software & Betriebsysteme => Thema gestartet von: Karl Lauer am 20.03.2008 | 19:55
-
Jo, hier die lang Fassung der Überschrift:
ich hab da das Problem das ich eine colum anlegen möchte wenn sie nicht schon existiert
also eben einen befehl
ALTER TABLE Tabelle ADD (column SMALLINT( 2 ) UNSIGNED NOT NULL DEFAULT '0') der nur ausgeführt wird wenn die column nicht existent ist.
Hab mich jetzt quer durch meine Lehrbücher gewälzt und mit der Online Dokumentation gekämpft, aber es nicht lösen können.
Help anybody?
-
Geht in den meisten Datenbanke mit gaaaaaaanz fiesen Tricks und ist daher auch sehr datenbankspeziefisch.
Und auch ich sage dir, was dir wohl jeder sagen wird: Wer zu Laufzeit seines Programmes die Tabellenstrucktur der Datenbank anfassen muß hat schlecht designed -> zurück ans Reisbreit (http://forum.virtualracing.org/images/smilies/peitsche.gif) ;)
Warum willst du das den tun?
-
Sorry! Beats me!
-
Laut meinem MySQL-Buch geht das nicht. Ansonsten hat der Rabe schon völlig recht, Datenbanken sollten erst eine vollständig designte Struktur besitzen, die nicht mehr verändert wird, bevor mit ihnen arbeitet. Naja, fast recht, denn
zurück ans Reisbreit
soll wohl eher
zurück zum Breitreis (was ja bekanntlich eine nord-thailändische Untergattung des Sumpfreis ist)
heißen. Und recht hat er, stärke Dich erst einmal ein wenig, und dann überleg' noch mal genau, was Du da überhaupt tun willst.
-
Dynamische Änderungen von Tabellen sind wohl fies - aber da sie dynamisch sind wirst du das ganze wahrscheinlich auch programmatisch machen, oder?
Dann hole dir erst mal mit DESCRIBE die Tabellendaten, und kontrolliere dann in deiner Programmiersprache, ob die Spalte existiert. Das ist zwar einerseits eine Anfrage mehr, aber andererseits eine SQL-seitig sehr billige. Da du hoffentlich nicht zu oft diese dynamische Anpassung vornimmst, sollte die Performance hier nur bedingt eine Rolle spielen.
-
Wenn Du die Entscheidung, ob die neue Spalte angelegt werden soll, aus irgendeinem Grund nicht auf der Anwendungsebene haben willst, könntest Du das natürlich mt einer Stored Procedure machen. (Habe extra noch einmal nachgesehen, MySQL 5 kann jetzt auch SPs)
Ansonsten wäre ich auch neugierig, wofür Du das haben willst,
Viele Grüße
kirilow
-
Bei richtigen Datenbanken (Oracle etc.) gibt es eine SQL-Tabelle in der die Tabellenstrukturen beschrieben sind (Catalog o.ä) und die man mit nem Select-String prüfen kann. Ob meinSQL das auch hat, müsste mal in der Doku geprüft werden.