Zeile vertauschen (MySQL) - Anfängerfragen

DerNeuling

Benutzer
Beiträge
9
Hallo zusammen!

Ich bin noch absoluter Anfänger mit (My-)SQL und habe eine Frage:
Ich habe folgende Tabelle:

upload_2021-7-13_16-16-47.png

Und möchte sie in in folgende Form ändern:
upload_2021-7-13_16-17-52.png

Es soll also der Audi als 4. Eintrag dazukommen und außerdem die Spalte "Preis" eingefügt werden.
Außerdem noch ein paar Werte geändert werden (A-Klasse -> C-Klasse, Roter Golf zu schwarzer Golf)
CID ist dabei mein PrimaryKey.

Ich habe nun also zuerst mit Update die enstsprechenden Werte geändert. Dann mit Alter Table die Spalte Preis hinzugefügt und anschließend überall mit Update die Preise gesetzt.
Dann habe ich zuletzt den Audi eingefügt.

Hier ist nun mein Problem: Der Audi hat nun logischerweise die CID von 4 und nicht 3 wie im Bild oben gewünscht. Ich müsste also irgendwie die Zeile vertauschen. Nur wie?

Ich habe bisher nur einen Workaround hinbekommen um die CID bzw. den Primary Key zu ändern.
Wenn ich mir meine Tabelle nun ausgebe, schaut die so aus:
upload_2021-7-13_16-23-53.png

Könnte mir jemand da helfen wie man das vernünftig macht? Aber bitte auf "low-level" :D
Mein Code:
Code:
UPDATE Auto SET Modell = "C-Klasse" WHERE CID = 2;
UPDATE AUTO SET Farbe = "Schwarz" WHERE CID = 3;
ALTER TABLE Auto
ADD Preis Float(10);
UPDATE Auto SET Preis = 39999.00 WHERE CID = 1;
UPDATE Auto SET Preis = 35000.00 WHERE CID = 2;
UPDATE Auto SET Preis = 28798.88 WHERE CID = 3;

INSERT INTO Auto(CID, Hersteller, Modell, Farbe, Preis)
VALUES(4, "Audi", "Q8", "Gelb", 79888.99 );

UPDATE AUTO SET CID = 5 WHERE CID = 3;
UPDATE AUTO SET CID = 3 WHERE CID = 4;
UPDATE AUTO SET CID = 4 WHERE CID = 5;

SELECT * FROM Auto;
 
Werbung:
ID ädnern: Das würdest Du niemals tun. Vergiß es bitte sofort.
Du musst Dich fragen, wie man in einer DB die Anzeige Reihenfolge mit SQL Techniken ändert.
Antwort: Mit einer vorgegeben Sortierfolge durch eine explizite Spalte oder implizit durch Nutzung einer vorhandenen, hier z.B. Hersteller oder Preis und darauf "Order By" anwenden.
 
Der Audi hat nun logischerweise die CID von 4 und nicht 3 wie im Bild oben gewünscht. Ich müsste also irgendwie die Zeile vertauschen.

Nein. Die CID ist ja (vermutlich) automatisch vergeben. Sie dient als PRIMARY KEY und, zumindest oft, dann auch als FOREIGN KEY. Daher willst Du dessen Wert niemals wieder ändern. Du willst die Reihenfolge im Resultat einer Abfrage ändern, dazu dient ORDER BY.
 
Erst einmal vielen Dank für Eure schnellen Antworten!

Okay, ich glaube ich habe einfach zu kompliziert (und falsch) gedacht. An Order By dachte ich gerade auch schon. :D Denn der Tabelle ansich ists ja eigentlich egal ob ich das vorher oder hinterher eingefügt habe richtig?
 
An Order By dachte ich gerade auch schon. :D Denn der Tabelle ansich ists ja eigentlich egal ob ich das vorher oder hinterher eingefügt habe richtig?
An Order By zu denken, wenn eine definierte Ausgabereihenfolge gewünscht ist, ist ein guter Gedanke.
..egal.. vorher .. nachher
Eine zeitlicher Reihenfolge benötigt sowas wie einen Timestamp als Sortierkriterium, falls nicht fein genug, eine garantierte, zusätzliche oder vollkommen eigenständige Sortierfolge.
ID können ebenfalls diese Kriterien erfüllen, allerdings muss die Erzeugung des Schlüssels so angelegt sein, dass das Verhalten / Funktion garantiert ist. Das ist idR. nicht der Fall. ID werden wie schon gesagt eigentlich nicht für sowas verwendet, besonders wenn der Hauch einer Chance besteht, dass man die Sortierfolge (und damit die Schlüsselinformation) ändern können will.
 
So weit bin ich leider noch nicht, aber ich behalts schonmal für die Zukunft im Hinterkopf. Nochmal danke für Eure Hilfe, wird sicher nicht meine letzte Frage bleiben... :confused: ^^
 
Werbung:
Ich bin noch absoluter Anfänger mit (My-)SQL

ich möchte hier anmerken, daß MySQL nicht wirklich gut geeignet ist, SQL zu lernen. Es fehlen viele Features, die mittlerweile üblich sind (hängt auch von der Version ab), dafür hat es Bugs, die seit zig Jahren bekannt und ungefixt sind.
Es gibt bessere und auch freiere Alternativen.
 
Zurück
Oben