SQL Spalte umbenennen?
Hallo,
ich muss nach Userinput ein Feld einer Tabelle umbenennen. Meine Frage ist nun wie genau das geht. Mit dem Befehl habe ich schon einen Anfang gefunden:
ALTER TABLE `TABELLE` CHANGE `ALTERNAME` `NEUERNAME`
Jedoch muss man hier für einen vernünftigen Rename auch alle Optionen, wie Typ, PrimaryKey, Autoincrement, ... angeben. Das geht jedoch schwer, wenn ich vorher nicht weiß, welche Typen das Feld hat. Für den Vorgang benutze ich PHP.
Meine Frage nun: Wie bekomme ich es hin, dass ich ein Feld einer Tabelle umbenennen kann, ohne irgendwelche Attribute (Primary Key, ...) zu verlieren.
Vielen Dank für die schnellen Antworten!
Stern garantiert!
4 Antworten
Das Umbenennen einer Spalte ist allenfalls im Teststadium einer Datenbank sinnvoll und nötig. Dafür gibt es auch eine SQL-Anweisung und die geht auch nur bei exclusiver Belegung der Tabelle. So wie ich Deine Frage verstehe, möchtest Du das im normalen Userbetrieb machen. Wie hast Du Dir das vorgestellt? Normalerweise arbeiten mehrere User gleichzeitig in der Datenbank. Das kann die Datenbank, dafür ist sie auch gemacht. Selbst wenn Du das hinbekommst, vernünftig arbeiten wirst mit der Datenbank nicht können. Das ist in etwa so, wie das Auswechseln von Zündkerzen bei laufendem Motor. Kein vernünftiger Mensch würde das machen.
Wenn Dir das notwendig erscheint, ist Deine Datenbank falsch konzipiert. Das was Du vorhast ist nichts anderes, als einen vorhandenen Fehler statt diesen zu beseitigen durch einen neuen zu kompensieren. Sowas kann man mal im kleinen Rahmen machen, nur ausnahmsweise, aber nicht als generelle Lösungsmöglichkeit.
Wenn Du verraten würdest, wozu Du das benötigst, könnten wir Dir helfen. So wirst Du nicht weiterkommen. Das wird so sein, um bei obigem Beispiel zu bleiben, wie Reifenwechsel während der Fahrt.
schau mal, was
select * from information_schema.columns where table_name ="" and column_name ="";
sagt.
Da gibts ne Spalte data_type und is_nullable, sowie weitere infos
bei table_name und column_name kommt entaprechend tabellen- und spaltenname rein
Mir ist da kein Weg bekannt, der das analysieren der Tabelle umgeht.
Entweder machst Du vorher ein describe table und bastelst daraus dein SQL oder du nimmst ein SHOW CREATE TABLE und holst dir daraus den entsprechenden Teil (ich spekuliere, dass Du MySQL nutzt).
Moin,
Standard ist ->
ALTER TABLE <old-name> RENAME <new-name>
ohne weitere angaben ...
so long(knife)
alter table ... rename ... kannst du mit Rename table ... to ... abkürzen, das arbeitet schneller.
Jedoch möchte ich das Feld umbenennen, nicht die Tabelle...
UPS,
Spalten ... lol okay my fault ... wie wäre es damit als Tip ?
alter table mytable alter column mycolumn mycolumn char(20);
Mehr dazu habe ich von denen gelernt -> http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/ALTER-TABLE
Auch diesen Befehl kenne ich schon. Das Problem ist, wie in meiner Frage beschrieben, dass ich den Datentyp und weitere Attribute (Primary Key, Unique, ...) nicht kenne.
Ich werde dann wohl irgendwas aus
basteln, da bleibt mir wohl nichts anderes übrig :D