# Struktur einer vorhandenen Datenbanktabelle ändern



## Leroy42 (24. Aug 2007)

Hallo,

ich habe vor drei Monaten eine MySQL-Datenbanktabelle angelegt:

```
"CREATE TABLE `rRechnung` ("
		+ "`id` INT NOT NULL AUTO_INCREMENT ,"
		+ "`nummer` TEXT,"
		+ "`kunde` int,"
		+ "`datum` datetime,"
		+ "`bezahlt` datetime,"
		+ "`versand` float,"
		+ "`bezahlTyp` int,"
		+ "PRIMARY KEY ( `id` )"
		+ ")",
```
die, wie sich heute herausgestellt hat, noch um eine Spalte

```
geliefert datetime
```
erweitert werden muss.   

Die prinzipielle Vorgehensweise ist mir klar:

1) Eine neue Tabelle rRechnung2 anlegen
2) Die alte Tabelle entlang der _ID_ Satz für Satz auslesen
    und die Sätze in dieser Reihenfolge in die neue Tabelle speichern
   (damit die IDs erhalten bleiben)
3) Die alte Tabelle löschen
4) Die neue Tabelle mit den Namen der alten versehen.

Punkt 4) ist notwendig, da eine weitere Tabelle _Posten_, die die
einzelnen Posten einer Rechnung aufnimmt, via "rechnung int" auf die
zugehörige ID der Rechnung verweist.

Nun meine Frage:

Kann ich die dann neu erzeugte Tabelle irgendwie umbenennen oder
muß ich allen Java-Programmen, die auf diese Datenbank Bezug nehmen,
den Namen der Tabelle von "rRechnung" auf "rRechnung2" ändern?

Vielen Dank im Voraus!


----------



## AlArenal (24. Aug 2007)

Öhm, wozu der Driss?

Why not "ALTER TABLE ... ADD ..." ????


----------



## SlaterB (24. Aug 2007)

mache für Punkt 4 doch einfach das gleiche:
die alte Tabelle ist gelöscht, also mit passenden Namen neu erstellen und alle Daten kopieren..

ALTER TABLE ist dir bekannt?


----------



## Leroy42 (24. Aug 2007)

_alter table rRechnung add geliefert datetime after bezahlt_

Woow! So einfach geht das ja; nix mit hin-und-her kopieren!  :shock: 

Jetzt noch eine Frage an die MySQL-Experten:

Gibt es auch eine einfache Möglichkeit, die neue Spalte in allen
Zeilen mit einem bestimmten Wert zu belegen? Zum Beispiel der 1. August 2007

_"update rRechnung set geliefert='2007-08-01' where id="_

Was muss dann hinter: _where id=_ damit alle Datensätze verändert werden?  ???:L 

Oder ist es gar möglich, ohne ein Java Programm, das Lieferdatum jeder
Rechnung auf das Rechnungsdatum der entsprechenden Rechnung zu setzen?  :shock:


----------



## AlArenal (24. Aug 2007)

Du lässt die WHERE-Klausel weg und schon nimmt er alle Datensätze.


----------



## Leroy42 (24. Aug 2007)

Verstehe ich MySQL richtig, das wenn ich schreibe


```
update rRechnung set geliefert=datum
```

dass dann das Lieferdatum *jeder* Rechnung auf den Wert
gesetzt wird, der dem Wert von _datum_ der entsprechenden
Zeile entspricht?

Ich stelle diese Frage hier, damit ich nicht aus Versehen
meine gesamte Tabelle zerstöre, wenn ich die obige Zeile abschicke.  :?


----------



## AlArenal (24. Aug 2007)

Hättest es ja mit einer Testtabelle testen können


----------



## ARadauer (25. Aug 2007)

ja auf jeder.

du kannst aber bei altern table, einen default wert angeben.

hast du irgendow zugriff auf phpmyadmin? da kannst du solche dinge über eine grafisch oberfläche machen und es wird dir der query angezeigt, so hab ich viel sql gelernt.


----------



## Leroy42 (25. Aug 2007)

ARadauer hat gesagt.:
			
		

> hast du irgendow zugriff auf phpmyadmin?



Habe ich tatsächlich (gerade herausbekommen).

Danke für den Hinweis; das erleichtert solche Änderungen ungemein;
da brauch' ich nicht jedesmal eine selbstgeschriebene JSP
bemühen um einen MySQL-Befehl abzusenden!


----------

