[SQL & PHP/mySQL]

stephandziurla

Erfahrenes Mitglied
Moin!

Ich würde gern wissen, ob es möglich ist, mit reinem SQL, eine Tabelle neu zu strukturieren. Hm, klingt ein wenig komisch. Folgendes Szenario dazu:

Ich habe eine Tabelle T_Kunden. Die Tabelle beinhalte eine Spalte "ID", welche gleichzeitig Primärschlüssel in der Tabelle ist. Von den 10 Einträgen (1,2,3,4,5,6,7,8,9,10) wird der 4. gelöscht (1,2,3,5,6,7,8,9,10). Lege ich danach einen neuen Eintrag an, so trägt der ja nicht die ID 4, sondern 11, gehe ich da richtig in der Annahme?

Wie kann ich es mittels SQL realisieren, dass quasi nach dem Eintragen, bzw. Löschen, alle ID's neu strukturiert werden? Geht das überhaut, oder müsste ich da mit PHP ran? Möchte das sehr gern aus bestimmten Gründen vermeiden.


Danke schonmal für die Hilfe
 
Wieso macht das keinen Sinn? Naja, ist ja auch egal. Es soll ja auch nur funktionieren, wie ist doch egal :)

Es gibt also keine SQL-Syntax, die in irgendeiner Art und Weise alle Einträge einer Spalte permanent(!, also nicht nur ORDER BY oder so etwas vergleichbares) ändert? Der PK muss in dieser Spalte nicht vorhanden sein.
 
stephandziurla hat gesagt.:
Wieso macht das keinen Sinn?
Ist im verlinkten Thread und dem dort enthaltenen Link von Marian ausführlich beschrieben.

stephandziurla hat gesagt.:
Es gibt also keine SQL-Syntax, die in irgendeiner Art und Weise alle Einträge einer Spalte permanent(!, also nicht nur ORDER BY oder so etwas vergleichbares) ändert? Der PK muss in dieser Spalte nicht vorhanden sein.
Es gibt keinen Befehl "Ordne alle Auto-Increment-Werte neu".

Darf ich fragen, warum das für Dich so wichtig ist?

Gruß hpvw
 
hpvw hat gesagt.:
Es gibt keinen Befehl "Ordne alle Auto-Increment-Werte neu".
Schließe ich daraus, dass es einen Befehl für das generelle Ordnen einer Spalte gibt? ;)
Damit meine ich keine Sortierkriterien wie ORDER BY oder ähnliches. Es geht mir um das permanente Ordnen einer x-beliebigen Spalte.

hpvw hat gesagt.:
Darf ich fragen, warum das für Dich so wichtig ist?

Naja, schwer zu sagen, wenn man von einer Sekunde auf die andere unter Druck gesetzt wird und ein Programm voll funktionieren muss. Ich müsste, wenn es so eine Möglichkeit wie o.a. nicht gäbe, das komplette Programm noch einmal umschreiben, was mich sehr viel Zeit kosten würde. Deshalb frag ich halt ;)
 
Zum Ordnen gibt es nur ORDER BY.
Das läßt sich auch relativ unproblematisch an bestehende Querys anhängen.
Wenn Dein Programm die beschriebene Art von Neuordnung erfordert, ist es vielleicht das Beste, wenn Du es komplett neu schreibst.

Mit einem PHP-Skript läßt sich ein Programm schreiben, welches die IDs wieder zusammenrutschen läßt. Bedenke dabei jedoch die Wirkung auf Fremdschlüssel!
Den nächsten Auto-Increment-Wert beeinflußt Du damit nicht. Du müßtest Dir selbst vor dem Eintragen den maximalen Wert holen und in PHP Dein eigenes Auto-Increment schreiben (SELECT MAX(ID)+1 AS nextID FROM Tabelle). Oder Du führst ein wie angesprochen geartetes Skript nach dem Einfügen aus.
In jedem Fall mußt Du dabei auch Transaktionssicherheit berücksichtigen.
Ich halte das für sehr umständlich und im Sinne von vernünftigem Datenbankprogrammierstil für völlig daneben.

Gruß hpvw
 

Neue Beiträge

Zurück