zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Problem mit auto-increment: Will eine Lücke in den IDs Füllen ohne Zähler zu erhöhen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 17.09.2007, 03:24
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard Problem mit auto-increment: Will eine Lücke in den IDs Füllen ohne Zähler zu erhöhen

Wie muss ein INSERT Query Aussehen der einen Eintrag in einer Tabelle mit einer Auto-increment ID Spalte, vornimmt aber eine selbstgewählte ID einträgt ohne den Incrementwert um eins zu erhöhen?
Das war jetzt vieleicht etwas zu kompakt formuliert deshalb kommt mein Problem jetzt etwas ausführlicher:
Ich habe wie gesagt eine Tabelle mit einer (neben anderen Spalten) ID-Spalte die die Eigenschaft auto-increment besitzt. Wenn ich also einen Eintrag vornehme, kann ich das ID Feld sparen, das Problem ist nur das es mir auch nichts bringt wenn ich eine Vorgabe für das ID Feld mache, egal was ich angebe es wird trotzdem der nächsthöhere Wert eingetragen und der interne Increment Zähler wird um eins erhöht (was sowieso klar ist wenn das ID Feld automatisch ausgefüllt wird).
Mein Problem ist nur das ich eine User-Tabelle habe bei dehnen die User IDs ab 100 beginnen sollen, das tun sie ja auch nur will ich jetzt manchmal manuell einen User einfügen und diesem dann eine ID unter 100 geben (die ja noch frei sind) wenn ich das Versuche bekommt der neue User aber erstmal die nächste Increment ID und erst dann kann ich sie Manuell auf einen Wert unter 100 ändern. Was doppelt schlecht ist nämlich
1. entsteht dann eine Lücke zwischen in den IDs zwischen den normalen Users (was zwar egal ist in der Regel, aber es gibt eben fällen in denen das stört ich sage nur in bestimmten Schleifen aber egel es stört eben) weil der spezial User ja eine ID annimmt z.b. 117 die ich dann auf z.b. 17 ändere d.h. der Normale User 117 wird niemals existieren weil der Autoincrement Zähler schon auf 118 steht, und bei diesem Zähler will und kann ich erst Recht keine Änderung vornehmen, denn man stelle sich vor ich ändere da etwas und gleichzeitig melded sich ein neuer User an, oder vieleicht sogar mehrere, außerdem ist das zu umständlich.
2. habe ich da eine zusätzliche Arbeit nach den Einfügen den Eintrag nochmal zu ändern

Also ist meine Frage, ob es einen Befehl gibt, also einen Query der die Incrementierung temporär unterdrückt und stattdesen meine ID-Angabe verwendet?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 17.09.2007, 08:56
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.024
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Vorweg, eine Lösung für dein Problem habe ich nicht.

Aber, warum willst du das tun? Für mich sieht das so aus, als würdest du bei Unix abgucken und die User unterhalb der ID 100 sind spezielle User. Wenn du bestimmt Rechte vergeben möchtest, dann tu das mit einem Flag, das auto_increment zu manipulieren ist nicht schön und öffnet nur unnötig eine Fehlerquelle.

Falls du dich gar nicht davon abbrigen lassen willst, wäre meine Idee den aktuelle höchsten Wert auszulesen, der Tabelle das auto_increment zu entziehen, dann dein INSERT zu machen und danach auto_increment neu zu setzen. Nochmal zur Warnung, ich würde das nicht tun
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 17.09.2007, 10:24
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.845
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Weil ich mir nach Deinem Post nicht mehr ganz sicher war, habe ich das gerade nochmal getestet.
Ich habe einen mySQL-4.1.22-Server und habe eine Test-Tabelle angelegt mit auto_increment 100.

Wenn ich jetzt mit
Code:
INSERT INTO `test`.`test` (
`id` ,
`name`
)
VALUES (
NULL , 'abc'
);
einen Datensatz eintrage, dann wird die id bei 100 beginnend lückenlos aufgefüllt.

Und wenn ich mit
Code:
INSERT INTO `test`.`test` (
`id` ,
`name`
)
VALUES (
2 , 'abc'
);
eintrage, dann erhält der Datensatz die id 2, so, wie gewünscht. Der auto_increment-Wert bleibt unverändert und wird anschliessend ohne id-Angabe wieder lückenlos weiter hochgezählt.

Sorry, aber konnte Dein geschildertes Problem nicht nachvollziehen.

Oder handelt es sich bei Deiner DB nicht um einen mySQL-Server?
Mit Zitat antworten
  #4 (permalink)  
Alt 17.09.2007, 15:02
Benutzerbild von Lockhead883
<? echo "Hello World"; ?>
XHTMLforum-Mitglied
 
Registriert seit: 01.03.2006
Beiträge: 132
Lockhead883 befindet sich auf einem aufstrebenden Ast
Standard

Letztendlich sind solche Spielerein aber total falsch, es gibt keinen guten Grund warum man den auto_increment Wert verändern sollte (import/export mal ausgeschlossen). Der Sinn des auto_increment ist es eine Tabellenzeile einzigartig zu machen.

Wenn du Benutzergruppen seperieren willst dann füge eine zusätzliche Zelle hinzu! Ist besser, garantiert!

http://www.google.de/url?sa=t&ct=res...LjUkMbiF4rGp3w

Was machst du nämlich wenn deine Anfangs auf 100 Einträge ausgelegt Idee nicht mehr ausreicht? Dann stehst du wie Bill Gates nämlich da und musst dich verteidigen oder rumtricksen!

"640 kB sollten eigentlich genug für jeden sein."

Mal zugemüte Führen....
Mit Zitat antworten
  #5 (permalink)  
Alt 17.09.2007, 15:39
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Die Antwort von mantiz irritiert mich jetzt doch etwas, ich werde das selbst nochmal Prüfen müssen. Ich hatte mal eine besonders schlimmen Fall im Zusammenhang mit einer Tabelle (ID Feld auto-increment ab 1) in die ich manuell einen Eintrag mit einer ID von 0 eingefügt habe, quasi um soetwas wie einen Default Eintrag zu haben (ich hätte natürlich auch eine belibige andere Zahl nehmen können, aber hier war mir die reproduzierbarkeit und exportierparkeit meines Scriptes auf anderen Servern wichtiger, man stelle sich nur vor ich hätte dafür eine ID von z.b. 107 gewählt und das ganze so in meinem Code verarbeitet dann hätte ich das Script auf einem anderen Server installiert welcher diese Eintrage erst im laufbetrieb Stück für Stück aufbaut, dann hätte es sicher ein Problem mit dem Autoincrement und der Primary Key Eigenschaft gegeben wenn der Zähler von sich aus bei 107 angekommen wäre).

Jedenfalls zurück zu diesem Problem, nach einem Backup dieser Tabell mit MySQLDumper habe ich versucht diesen mit dem gleichen Tool wieder zu installieren und tatsächlich funktionierte das auch, bis auf die Tatsache das Mysql Dumper es nicht schafte den 0er ID Eintrag einzufügen, was ich erst merkte als mein Script merkwürdige Verhaltensweisen zeigte.
Mit Zitat antworten
  #6 (permalink)  
Alt 17.09.2007, 15:48
Benutzerbild von ArcVieh
//
XHTMLforum-Kenner
 
Registriert seit: 19.12.2006
Ort: Gütersloh
Beiträge: 1.847
ArcVieh sorgt für eine eindrucksvolle AtmosphäreArcVieh sorgt für eine eindrucksvolle Atmosphäre
Standard

auto_increment ist nicht dazu da um eine Tabellenzeile einzigartig zu machen. Sondern um ganz stumpf immer einen hoch zu zählen. Viele verwenden das natürlich für eine ID, ist ja auch konfortabel.

Aber in der Regel kann man eine Zeile auch anders einzigartig machen, z.B. mit einem zusammengesetzten PRIMARY KEY.

Zitat:
Jedenfalls zurück zu diesem Problem, nach einem Backup dieser Tabell mit MySQLDumper habe ich versucht diesen mit dem gleichen Tool wieder zu installieren und tatsächlich funktionierte das auch, bis auf die Tatsache das Mysql Dumper es nicht schafte den 0er ID Eintrag einzufügen, was ich erst merkte als mein Script merkwürdige Verhaltensweisen zeigte.
Bitte melde das mal im MySQL Dumper Forum.
__________________
CSS-FAQ beantwortet die meisten Fragen | Retro coding gegen Divitis | Code validieren & posten für Hilfe
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Div height auto Problem thiagojonas CSS 9 25.03.2010 12:44
rätselhafter Leerraum zwischen Content und Footer im IE jhonnybravo CSS 5 04.03.2010 11:47
Problem mit CSS in Joomla 1.5 noobilicius CSS 6 25.09.2008 20:24
margin: auto - ohne hat der Firefox ein Problem ludoergosum CSS 6 01.08.2008 09:18
CSS Layout im Dreamweaver skurril - online jedoch korrekt cellshade CSS 14 27.08.2007 15:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:20 Uhr.