Spaltentyp im nachhinein ändern möglich und empfehlenswert?

John85

Benutzer
Beiträge
6
Guten Mittag und hallo zusammen :)

ich hoffe ich bin hier im richtigen Unterforum gelandet :)

Es geht darum, dass ich eine recht frische Tabelle habe, jetzt aber festgestellt habe, dass ich gerne eine Spalte von INT zu FLOAT oder DOUBLE ändern würde, da ich eine Kommazahl benötige.
Ich arbeite mit einer Maria Datenbank und PHPMyAdmin. Dort kann ich die Spalte auch bearbeiten, nun habe ich mir die Frage gestellt, kann das irgendwas kaputt machen?
Es waren aktuell nur ein paar Zahlen drinne, diese habe ich vorsichtshalber mal entfernt.

Ich habe dann auch mal testweise versucht auf DOUBLE zu stellen, leider kommt immer ein Fehler, welchen ich leider nur als Bild kopiert bekomme, da wenn ich auf die Meldung klicke um den Text zu makieren diese gleich weggeht.
Ich habe Standardmäßig immer NULL in der Spalte und NULL Erlaubt aber auch das abändern bringt leider garnichts :(

Anbei nochmal die Änderung als Text, die ich über die SQL Vorschau bekomme:

ALTER TABLE `Tabelle1` CHANGE `Spalte1` `Spalte1` DOUBLE(10) NULL DEFAULT NULL;

Ich hoffe ich habe alles verständlich geschrieben und ihr könnt mir sagen ob es öglich ist und eine gute Idee eine INT Spalte zu FLOAT oder DOUBLE zu ändern und wie ich das am besten mache, da es über die GUI ja nicht klappt oder ich etwas falsch mache?

Aternativ dachte ich auch dran die Spalte zu löschen und nochmal neu zu erstellen, wäre das besser?
Wäre die Spalten ID dann aber weg und es wäre sozusagen eine Lücke?

Viele Grüße und schonmal vielen Dank euch :)
 

Anhänge

  • mariadbfehler.JPG
    mariadbfehler.JPG
    24,2 KB · Aufrufe: 3
Werbung:
Code:
edb=*# create table john85 (i int);
CREATE TABLE
edb=*# copy john85 from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1
>> 3
>> 8
>> 19
>> 4711
>> \.
COPY 5
edb=*# alter table john85 alter COLUMN i type numeric;
ALTER TABLE
edb=*# select * from john85 ;
  i   
------
    1
    3
    8
   19
 4711
(5 rows)

edb=*# update john85 set i = i + 0.5;
UPDATE 5
edb=*# select * from john85 ;
   i    
--------
    1.5
    3.5
    8.5
   19.5
 4711.5
(5 rows)

edb=*#

Und ja: schaue ins Handbuch Deiner Datenbank, wie es da geht.
 
Möglich ist das, empfehlenswert nur bedingt.
Wenn der neue Typ mächtiger als der alte ist, bleiben die Daten erhalten, sofern die DB das implizit konvertieren kann.

Ansonsten 3 Sprung:
Neue Spalte mit richtigem Typ anlegen
Update table set neueSpalte = alteSpalte |<alternativFormelZurBerechnungNeuerWertAusAlterWert>;
Alte Spalte löschen

Wenn die Spalte zurvor durch Constraints "bewacht" wird, muss das entsprechend berücksichtigt werden.
 
Vielen Dank für die schnellen Antworten.

Ich habe es jetzt so gemacht, das ich die Spalte gelöscht habe und eine neue Spalte an der gleichen Position eingefügt habe. Was auch erst nicht ging, da ich unter "Länge/Werte" einen Wert eingegeben habe. Das war wohl auch vorhin der Fehler :(
 
Warum?
Was kann passieren? Daten sind nicht verloren gegangen und die Spalte heißt gleich, sowie die ID ist gleich oder muss noch was bereinigt werden im Hintergrund?
 
Meine Tabelle hat nichtmal 10 Zeilen, in der Spalte ist kein Wert gewesen :)
Es handelt sich um eine Hobby private kleine Datenbank.

Es ging mir nur darum, ob es referenzprobleme geben kann wenn ich im Nachhinein sowas abänder beispielsweise mit einem Bearbeitunsgprogramm etc. aber das sieht gut aus, wird alles richtig erkannt.

Mir ging es auch darum zu verstehen was da passiert ob man da außer die löschung der Spaltenwerte weiteres in der DB kaputt machen kann.
Falls ja hätte ich die Tabelle kurz neu erstellt.

Es ging mir mehr um das Verständnis und ein bisschen um das ich ncith nochmal alles neu erstellen wollte, aber wenn man gesagt hätte, es wäre dann bei den IDs eine Lücke entsanden ähnlich wie bei einer ID in einer Zeile, wenn ich diese lösche und man sollte das nciht machen, dann hätte ich die Tabelle schnell neu erstellt.
 
Möglich ist das, empfehlenswert nur bedingt.
Wenn der neue Typ mächtiger als der alte ist, bleiben die Daten erhalten, sofern die DB das implizit konvertieren kann.

Ansonsten 3 Sprung:
Neue Spalte mit richtigem Typ anlegen
Update table set neueSpalte = alteSpalte |<alternativFormelZurBerechnungNeuerWertAusAlterWert>;
Alte Spalte löschen

Wenn die Spalte zurvor durch Constraints "bewacht" wird, muss das entsprechend berücksichtigt werden.
Woher weiß ich das die Spalte überwacht wird/wurde? Stehtd as in PHP Myadmin irgendwo?
 
Woher weiß ich das die Spalte überwacht wird/wurde? Stehtd as in PHP Myadmin irgendwo?
Das steht in der Definition der Tabelle, in der Datenbank. PHPMyAdmin ist NICHT die Datenbank. Du kannst PHPMyAdmin komplett löschen (was gar nicht mal so schlecht wäre, aber das ist ein anderes Thema ...) und die Tabelle ist immer noch da. Magisch, oder?
 
Hallo,

das einzige was du überlegen musst ist ob FLOAT die richtige Vorgabe ist, denn bei diesem Datentyp lassen sich nicht alle Zahlen abbilden. Dies ist aber kein Problem von MySQL oder MariaDB. Da kann Google dir helfen, wenn es interessiert.

Wenn du möchtest das alle Werte genau gespeichert / wiedergegeben werden solltest du DEZIMAL nehmen. Bei dieser Darstellungsform gibt du die Anzahl Vor / Nachkomma stellen an. (10,2) 10 = Anzahl aller Stellen, 2 davon als Nachkomma.


Gruß
Bernd
 
Werbung:
Hallo,

das einzige was du überlegen musst ist ob FLOAT die richtige Vorgabe ist, denn bei diesem Datentyp lassen sich nicht alle Zahlen abbilden. Dies ist aber kein Problem von MySQL oder MariaDB. Da kann Google dir helfen, wenn es interessiert.

Wenn du möchtest das alle Werte genau gespeichert / wiedergegeben werden solltest du DEZIMAL nehmen. Bei dieser Darstellungsform gibt du die Anzahl Vor / Nachkomma stellen an. (10,2) 10 = Anzahl aller Stellen, 2 davon als Nachkomma.


Gruß
Bernd
Hallo Bernd,

vielen Dank für deine Antwort :)

nachfolgende Zahlen möchte ich gerne in die Spalte schreiben:


5​
4,5​
4​
3,5​
3​
2,5​
2​
1,5​
1​
0,5​
0​

Würde Double dafür passen? Oder würdest du mir Dezimal empfehlen?
Andere Zahlen bis auf die oben genannten möchte ich nicht einpflegen :)

Viele Grüße und ein schönes Wochenende dir.
 
Zurück
Oben