[SQL] AUTO_INCREMENT verkleinern

27o8

abgemeldet
2 Mai 2006
9.028
933
Hallo,
um eine durchgehende Nummerierung zu verwenden ohne hierbei, im Falle einer Löschung, Zahlen auszulassen würde ich gerne nach dem Löschen eines Eintrages:

1) Bei allen Einträgen die > als die Zahl des gelöschten sind von der Zahl 1 subtrahieren das ist ja kein Problem.

Damit es aber dann auch in der Nummerierung weitergeht möchte ich AUTO_INCREMENT auch senken dafür hatte ich folgendes probiert:

Code:
ALTER TABLE su_transaktionen AUTO_INCREMENT = AUTO_INCREMENT -1

Allerdings liefert mir das einen Error zurück:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AUTO_INCREMENT -1' at line 1
Hat jemand eine Idee wie ich das anders lösen kann?
 
Ich frag mal ganu unverholen, wo der Sinn liegt ein AUTO increment zu decrementieren und aufzufüllen. Eigentlich soll man da gar nicht rumfummeln, da die Ids als schlüssel für weitere Tabellen gelten können und fortlaufende Nummern niemals doppelt vergeben werden sollen.

Bleiben dir 2 Möglichkeiten:
Du benutzt auto_increment so wie es gedacht ist und lässt Lücke Lücke sein oder du änderst den Datentyp deiner Spalte und setzt die IDs selbst.
 
In dem Sinne wird es ja nicht doppelt vergeben weil der alte Eintrag ja gelöscht wird ;) ich brauche das einfach um eine durchgehende Nummerierung von Rechnungen zu haben. Wenn ein Kauf storniert wird lösche ich auch die entsprechende Rechnung aus der Datenbank und vergebe die Rechnugsnummer erneut.

Ich könnte zwar auch wie du sagst meine eigenen IDs verwenden, aber ich bin der Meinung das es so wie ich es mir gedacht habe einfacher geht.

Auto Increment kann man ja auch verändern :YES: nur geht das -1 leider nicht.

Ich könnte es ja so machen:

PHP:
$table_info = mysql_fetch_assoc(mysql_query('SHOW TABLE STATUS FROM datenbank LIKE "su_transaktionen"'));

mysql_query('ALTER TABLE su_transaktionen AUTO_INCREMENT = '.($table_info['Auto_increment']-1));
Aber geht das nicht einfacher im Sinne von kompakter? :p
 
Setze AUTO_INCREMENT auf 1. MySQL zumindest is so clever und nimmt die kleinstmögliche ID (in deinem Fall also aktuell-1).

Trotzdem würde ich drüber nachdenken, nicht eine richtige Spalte für Rechnungsnummer zu machen und den AutoIncrement in Ruhe zu lassen. AI-Spalten sind normal immer nur Surrogate.
 
In dem Sinne wird es ja nicht doppelt vergeben weil der alte Eintrag ja gelöscht wird ;) ich brauche das einfach um eine durchgehende Nummerierung von Rechnungen zu haben. Wenn ein Kauf storniert wird lösche ich auch die entsprechende Rechnung aus der Datenbank und vergebe die Rechnugsnummer erneut.

Es gibt schon Gründe warum Rechnungen immer eine eindeutige Nummer haben, selbst wenn ein Kauf storniert wird.
 
Es gibt schon Gründe warum Rechnungen immer eine eindeutige Nummer haben, selbst wenn ein Kauf storniert wird.

Sage ich ja, dass ist eine vergewaltigung der a_i Funktion ;) - Rechnungsnummer doppelt zu vergeben kann zu großem Chaos führen, gerade wenn die Querverweise zur Rechnungsnummer noch bestehen bleiben - ich würde dringend davon abraten.
 
Auf keinen Fall eine auto_increment Spalte anfassen. Damit gefährdest du die Konsistenz des gesamten Projektes und der Nutzen ist praktisch nicht vorhanden. Eine Rechnungsnummer solltest du auf jeden Fall seperat speichern.