PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL autoincrement



Romanday
26-07-2005, 17:32
Füge ich einen neuen Tupel in eine Tabelle ein (mySQL)
wird die autoinkrement Spalte gnadenlos hochgezählt.
Wenn z. B. der letzte Werte eine 15 war, und ich diese
Zeile lösche wird beim nächsten eingefügten Datensatz
trotzdem die 16 genommen, obwohl der kleinste Wert
in der autoinkrement Spalte z. B. ein 5 ist.

Um dies zu umgehen frage ich vorher das Maximum
in der Autoinkrement Spalte ab und zähle + 1.
Das wäre dann meine neue Id.

Werden mehrere INSERT Anweisungen in mehrere Tabellen vorgenommen
wird natürlich immer die neu erstellte ID genommen.

Ist dieses Vorgehen sinnvoll?
Kann es dadurch irgenwelche Probleme geben?
Gibt es bei MySQL nicht eine Anweisung immer den größten Wert +1
zu nehmen für das Inkrement zu nehmen?
Hatte mal was von Last Insert ID gehört.

quinte17
26-07-2005, 20:29
da das autoincrement "meistens" auch der key ist, ist es nicht sinnvoll eine nummer 2 mal zu verwenden. somit ist es eigentlich recht umständlich die nummer selbst zu versorgen.
wenn allerdings eine lückenlose nummerierung gewünscht ist, dann ist dies was anderes, aber sobald du einen satz löscht, ändern sich ja im schlechtesten fall alle zahlen...

ich würde dieses händische kreiren grundsätzlich als überflüssig sehen.

schöne grüße!
greetz

Romanday
26-07-2005, 23:44
da das autoincrement "meistens" auch der key ist, ist es nicht sinnvoll eine nummer 2 mal zu verwenden. somit ist es eigentlich recht umständlich die nummer selbst zu versorgen.


Wenn ich einen Fremdschlüssel definieren möchte, brauch ich doch 2x
die Nummer.



was anderes, aber sobald du einen satz löscht, ändern sich ja im schlechtesten fall alle zahlen...


Nö, dann lösche ich den Eintrag des Fremdschüssels mit.

Mich nervt das bloß, wenn das schon beim rumprobieren das Inkrement
sich hochzählt.

Das muß doch eine MySQL Anweisung geben das Inkrement auf den
realen Maximalwert zu setzen.

quinte17
27-07-2005, 09:20
ein fremdschlüssel ist aber kein autoincrement feld, sondern übernimt den wert des keys, womit hier ein autoincrement unsinnig ist.

mit dem satz löschen hatte ich nicht inkonsistenzen angesprochen, die bei einem löschen des keys passieren können. ich meinte damit allgemein die anwendung eine durchgängige zahlenreihe zu besitzen. (formel 1 rangliste)

desweiteren hast du nicht nach fremdschlüssel gefragt :D sondern wolltest nur wissen inwieweit des autoincrement sinn macht.

warum du bei einem fremdschlüssel 2x die nummer brauchst verstehe ich nicht ganz. bei einem konstrukt ala:


|----------| |----------|
|person |----<|tier |
|----------| |----------|


folgende felder sind nun in der person:
per_id (ist der künstliche schlüssel mit autoincrement)
per_name

in der tier sind folgende felder:
tir_per_id (ist der fremdschlüssel OHNE autoincrement)
tir_rasse
tir_name

wenn du nun nicht auf die einzelnen tiere direkt zugreifen möchtest, reicht dies föllig aus. tier braucht dann nicht noch unbedingt einen eigenen schlüssel. als eigenen schlüssel könnte zum beispiel die kombination aus rasse und name bestehen, was aber meistens nicht gemacht wird.
oft nimmt man hier wieder einen künstlichen schlüssel:
tir_id (ist schlüssel mit autoincrement)

da für die datenbank die werte in den schlüsseln egal sind, brauchst du keine schöne aufeinanderfolgende werte innerhalb der schlüssel. es ist nur der eigene geschmack und verstand der einem dies einreden könnte.

hoffe nun einige fragen geklärt zu haben.
wenn nciht, dann bitte die frage nochmal deutlicher stellen.

schönen tag noch
greetz

Romanday
27-07-2005, 10:15
hoffe nun einige fragen geklärt zu haben.
wenn nciht, dann bitte die frage nochmal deutlicher stellen.

schönen tag noch
greetz

Vielen Dank für dein ausführliche Erklärung.
Hatte 1x autoincrement zu viel. Das war
der Denkfehler.