Azubifrage: Spalten verschieben
Azubifrage: Spalten verschieben
am 08.03.2005 12:11:34 von Klaus Zimmermann
hallo zusammen,
ich habe wieder einmal ein attentat auf euch vor. und zwar möchte ich
gern von euch wissen ob es denn möglich ist mit hilfe einer
MySQL-anweisung spalten innerhalb einer tabelle zu verschieben. bitte
flamt mich nicht zu über den sinn oder unsinn dieses vorhabens. ich habe
auch nur diese aufgabe bekommen und suche eine möglichkeit diese ohne
heftige php-scripte zu lösen wenn es einen schnelleren weg gibt.
lg in die NG
Re: Azubifrage: Spalten verschieben
am 08.03.2005 18:17:16 von Klaus Mueller
Zur Klarheit:
Willst Du aus:
tabelle (a, c, b) eine tabelle(a, b, c) machen
oder willst Du:
Den Inhalt von b in c ablegen und umgedreht?
*gruebel*
Re: Azubifrage: Spalten verschieben
am 08.03.2005 20:58:09 von Helmut Chang
KLaus Zimmermann schrieb:
> und zwar möchte ich
> gern von euch wissen ob es denn möglich ist mit hilfe einer
> MySQL-anweisung spalten innerhalb einer tabelle zu verschieben.
AFAIK nicht. Wozu auch (wenns darum geht aus Tabelle (a, b, c) ->
Tabelle (c, a, b) zu machen)?
Ansonsten Daten dumpen, Tabelle löschen, Tabelle neu anlegen, Dump
zurückspielen.
> ich habe
> auch nur diese aufgabe bekommen...
Erinnert mich an den Aprilscherz, den Lehrling (.at für Azubi) in die
Eisenwarenhandlung zu schicken, um die Gewichte für die Wasserwaage
abzuholen ;-).
gruss, heli
Re: Azubifrage: Spalten verschieben
am 08.03.2005 22:35:35 von Johannes Vogel
Hi Klaus
KLaus Zimmermann wrote:
> ich habe wieder einmal ein attentat auf euch vor. und zwar möchte ich
> gern von euch wissen ob es denn möglich ist mit hilfe einer
> MySQL-anweisung spalten innerhalb einer tabelle zu verschieben. bitte
> flamt mich nicht zu über den sinn oder unsinn dieses vorhabens. ich habe
> auch nur diese aufgabe bekommen und suche eine möglichkeit diese ohne
> heftige php-scripte zu lösen wenn es einen schnelleren weg gibt.
Ein temporäres Attribut am neuen Ort anlegen, die Daten des alten
Attributs rüberkopieren, das alte Attribut löschen und das temporäre
umbenennen. Fertig.
Nein, in einer Anweisung geht das nicht. Und nein, ein dump ist dafür
völlig übertrieben - vor allem auch, da dadurch systemabhängige
Fehlerquellen hinzukommen können.
Helmut: Das macht IMHO sehr wohl Sinn, Ordnung in der DB zu haben.
HTH, Johannes
Re: Azubifrage: Spalten verschieben
am 08.03.2005 23:05:10 von Helmut Chang
Johannes Vogel schrieb:
> Und nein, ein dump ist dafür
> völlig übertrieben - vor allem auch, da dadurch systemabhängige
> Fehlerquellen hinzukommen können.
Hast ja recht ;-). Quick and dirty-Einfall und vergessen,
dazuzuschreiben, dass ja nicht auf einem laufenden Produktivsystem zu
machen.
> Helmut: Das macht IMHO sehr wohl Sinn, Ordnung in der DB zu haben.
Ja, macht es IMHO auch. Aber die Reihenfolge der Spalten nachträglich zu
ändern? Evtl. noch in einem Produktivsystem? Außer bei einem ERD oder
einem schnellen 'SELECT * FROM Tabelle' zur Übersicht fällt mir momentan
kein Fall ein, wo diese "Ordnung" nach außen hin "sichtbar" wäre.
Im Einsatz halte ich mich an
16.14. Warum soll ich nicht SELECT * schreiben?
Zusätzlich habe ich gerade das gefunden:
A.7.2. How to Change the Order of Columns in a Table
Entspricht auch nicht ganz deiner Lösung ;-).
Aber interessant finde ich vor allem den ersten Absatz aus diesem Kapitel:
| First, consider whether you really need to change the column order in
| a table.
Also warum sollte es notwendig sein?
| The whole point of SQL is to abstract the application from the data
| storage format. You should always specify the order in which you wish
| to retrieve your data.
Eben.
gruss, heli
Re: Azubifrage: Spalten verschieben
am 09.03.2005 01:42:30 von Michael Fesser
.oO(Helmut Chang)
>Johannes Vogel schrieb:
>
>> Helmut: Das macht IMHO sehr wohl Sinn, Ordnung in der DB zu haben.
>
>Ja, macht es IMHO auch. Aber die Reihenfolge der Spalten nachträglich zu
>ändern? Evtl. noch in einem Produktivsystem? Außer bei einem ERD oder
>einem schnellen 'SELECT * FROM Tabelle' zur Übersicht fällt mir momentan
>kein Fall ein, wo diese "Ordnung" nach außen hin "sichtbar" wäre.
Sehe ich ähnlich. Ich selbst bestimme mit der Datenbankabfrage, in
welcher Reihenfolge ich die Spalten und Zeilen gerne hätte. Den Rest
überlassen ich dem Server.
>Zusätzlich habe ich gerade das gefunden:
>
>A.7.2. How to Change the Order of Columns in a Table
>
>[...]
>
>Also warum sollte es notwendig sein?
>
>| The whole point of SQL is to abstract the application from the data
>| storage format. You should always specify the order in which you wish
>| to retrieve your data.
>
>Eben.
ACK
Wobei ich mich allerdings an einige Punkte im Handbuch erinnern kann,
bei denen die Reihenfolge der Spalten eine Rolle spielen kann, so z.B.
bei Feldern vom Typ TIMESTAMP.
Micha
Re: Azubifrage: Spalten verschieben
am 09.03.2005 09:46:34 von Helmut Chang
Michael Fesser schrieb:
> Wobei ich mich allerdings an einige Punkte im Handbuch erinnern kann,
> bei denen die Reihenfolge der Spalten eine Rolle spielen kann, so z.B.
> bei Feldern vom Typ TIMESTAMP.
Yepp. Nur das erste TIMESTAMP-Feld wird automatisch mit der aktuellen
Zeit upgedatet. TIMESTAMP halte ich aber gerade deshalb (und auch wegen
seiner range-beschränkung) für einen suboptimalen Datentyp.
gruss, heli
Re: Azubifrage: Spalten verschieben
am 09.03.2005 12:44:40 von Axel Schwenke
Helmut Chang wrote:
> Michael Fesser schrieb:
>
>> Wobei ich mich allerdings an einige Punkte im Handbuch erinnern kann,
>> bei denen die Reihenfolge der Spalten eine Rolle spielen kann, so z.B.
>> bei Feldern vom Typ TIMESTAMP.
>
> Yepp. Nur das erste TIMESTAMP-Feld wird automatisch mit der aktuellen
> Zeit upgedatet.
Ich finde diese Einschränkung nicht wesentlich. Mehr als eine
Timestamp-Spalte bringt ohnehin nichts. Wenn überhaupt, dann
will man eine TIMESTAMP und evtl. weitere DATETIME Spalte(n).
XL
Re: Azubifrage: Spalten verschieben
am 09.03.2005 13:45:25 von Helmut Chang
Axel Schwenke schrieb:
>>Yepp. Nur das erste TIMESTAMP-Feld wird automatisch mit der aktuellen
>>Zeit upgedatet.
>
>
> Ich finde diese Einschränkung nicht wesentlich.
Ich finde auch nicht die Einschränkung wesentlich, sondern eher den
umgekehrten Fall, bzw. die Sicht aus der anderen Richtung: Warum verhält
sich die erste TIMESTAMP-Spalte anders? Genau da kann es dann bei
Änderungen an der Tabelle zu Problemen kommen: Neue TIMESTAMP-Spalte
davor hinzugefügt, weil irgendwie in der "Ordnung" davor logisch, kurz
mal nicht nachgedacht, und schon funktioniert die Auto-Magie nicht mehr.
Natürlich ist das im Prinzip die Schuld des Entwicklers. Trotzdem wäre
mir lieber, MySQL würde sowas unterstützen:
CREATE TABLE Foo (
bar DATETIME DEFAULT NOW()
);
> Mehr als eine
> Timestamp-Spalte bringt ohnehin nichts.
Eben. Deshalb meine Meinung, dass TIMESTAMP suboptimal ist.
> Wenn überhaupt, dann
> will man eine TIMESTAMP und evtl. weitere DATETIME Spalte(n).
Nochmals eben. Da ist mir lieber, gleich lauter DATETIME-Spalten zu
definieren. Wobei bei MySQL eben wieder die Einschränkung besteht, dass
sowas wie obiges DEFAULT-Statement nicht funktioniert. Und außerdem
nicht genau das gleiche tun würde.
Beispiel mit Denkfehler meinerseits:
Ich benötige eine Tabelle, die einen Zeitstempel beim INSERT mit der
aktuellen Zeit setzt. Davon ausgehend, dass TIMESTAMP ähnliches tut wie
ein in MySQL nicht mögliches DEFAULT CURRENT_TIME() (um
SQL-Standardkonform zu sein), habe ich eine TIMESTAMP-Spalte benutzt.
Nicht bedacht habe ich seinerzeit, dass der Wert der TIMESTAMP-Spalte
auch bei jedem UPDATE neu gesetzt wird. Zugegebenermaßen mein Fehler.
Aber IMHO doch irgendwie verständlich, dass so etwas passiert.
gruss, heli
Re: Azubifrage: Spalten verschieben
am 09.03.2005 15:49:34 von Axel Schwenke
Helmut Chang wrote:
> Axel Schwenke schrieb:
>
>>>Yepp. Nur das erste TIMESTAMP-Feld wird automatisch mit der aktuellen
>>>Zeit upgedatet.
>>
>> Ich finde diese Einschränkung nicht wesentlich.
>
> Ich finde auch nicht die Einschränkung wesentlich, sondern eher den
> umgekehrten Fall, bzw. die Sicht aus der anderen Richtung: Warum verhält
> sich die erste TIMESTAMP-Spalte anders?
....
> CREATE TABLE Foo (
> bar DATETIME DEFAULT NOW()
> );
> Da ist mir lieber, gleich lauter DATETIME-Spalten zu
> definieren. Wobei bei MySQL eben wieder die Einschränkung besteht, dass
> sowas wie obiges DEFAULT-Statement nicht funktioniert.
Da hat sich mit 4.1.2 einiges geändert:
XL
Re: Azubifrage: Spalten verschieben
am 09.03.2005 17:14:11 von Helmut Chang
Axel Schwenke schrieb:
>>CREATE TABLE Foo (
>> bar DATETIME DEFAULT NOW()
>>);
>
>
>>Da ist mir lieber, gleich lauter DATETIME-Spalten zu
>>definieren. Wobei bei MySQL eben wieder die Einschränkung besteht, dass
>>sowas wie obiges DEFAULT-Statement nicht funktioniert.
>
>
> Da hat sich mit 4.1.2 einiges geändert:
>
>
Das mit der display format-Änderung hatte ich mal gelesen und wieder
vergessen. Das mit DEFAULT CURRENT_TIMESTAMP kannte ich noch nicht. So
stell ich mir das vor.
gruss, heli
Re: Azubifrage: Spalten verschieben
am 19.03.2005 17:44:05 von Jacob Hayn
Helmut Chang wrote:
> ...
> Erinnert mich an den Aprilscherz, den Lehrling (.at für Azubi) in die
> Eisenwarenhandlung zu schicken, um die Gewichte für die Wasserwaage
> abzuholen ;-).
Das kenn ich, bei uns im Betrieb sollte mal eine Azubiin bei PC-Spezi
eine Bitwaage holen - Die wollte echt losgehen und das Teil holen :D
gruß, Jay
Re: Azubifrage: Spalten verschieben
am 25.03.2005 17:07:35 von Patrick Diddens
"Jacob Hayn" schrieb:
> Helmut Chang wrote:
>> ...
>> Erinnert mich an den Aprilscherz, den Lehrling (.at für Azubi) in die
>> Eisenwarenhandlung zu schicken, um die Gewichte für die Wasserwaage
>> abzuholen ;-).
>
> Das kenn ich, bei uns im Betrieb sollte mal eine Azubiin bei PC-Spezi eine
> Bitwaage holen - Die wollte echt losgehen und das Teil holen :D
Das erinnert micht an die guten alten Siemens Lufthaken. Nur dumm,
wenn der Azubi die zu kleinen hochgeschleppt hat ;)
patrick
Re: Azubifrage: Spalten verschieben
am 27.03.2005 19:32:22 von Holger Scherer
"Helmut Chang" schrieb im Newsbeitrag
news:397rfaF61ekq4U1@individual.net...
> Michael Fesser schrieb:
>
> Yepp. Nur das erste TIMESTAMP-Feld wird automatisch mit der
aktuellen
> Zeit upgedatet.
Welche Datenbank verkauft denn solch nen Blödsinn als "Feature"?
-h