WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   sql - problem mit auto_increment (http://www.wcm.at/forum/showthread.php?t=67523)

RaistlinMajere 24.08.2002 17:50

sql - problem mit auto_increment
 
für eine id-vergabe bietet sich das attribut auto_increment geradezu an, nur habe ich bemerkt, daß sich unabhängig von der zahl der einträge in meiner db die id erhöht. d.h. wenn ich testhalber einmal 2 einträge mache, diese danach wieder lösche und dann wieder einen eintrag mache, dann hat dieser die id #3 anstatt #1. kann mir jemand erklären, wie ich im falle einer leeren db immer mit #1 anfange?

käptn 24.08.2002 18:09

Hört sich nach MyISAM Tabellen von MySQL an...

Da gibt's n'paar Möglichkeiten:

1. verwende ISAM-Tables

2. im Falle einer wirklich komplett leeren Tabelle kannst du mit >>DELETE FROM tabelle<< oder >>TRUNCATE tabelle<< die Auto-Increment-Spalte zurücksetzen

3. im Falle einer Tabelle mit gelöschten Datensätzen - damit leben (wieso eigentlich nicht?) oder einen nichtinkrementelle ID_Spalte benutzen und manuell mitzählen...

HTH

MrWolf 24.08.2002 19:04

ich habe das problem auch mal gehabt:
in österreich ist es dem finanzamt leider wichtig, dass rechnungen einer firma eine eindeutige aufsteigende lückenlose nummerierung haben.

da kommt man dann meist nicht umhin sich selbst um nummerierungen und renumerierungen bei dazwischen gelöschten rechnungen zu kümmern. (genau das wollen sie ja damit verhindern) ist aber in der praxis teilweise kaum machbar, da man nie verhindern kann, dass ein mitarbeiter bei der erstellung von rechnungen fehler macht bzw. rechnungen doppelt erstellt werden etc. alles gründe eine alte rechnung nachträglich zu löschen.

@käptn: wie funktioniert das genau mit den isam tables, klingt interessant?

lg

käptn 24.08.2002 19:14

Zitat:

Original geschrieben von MrWolf
@käptn: wie funktioniert das genau mit den isam tables, klingt interessant?
Naja, dass es nicht zu Mißverständnissen kommt: 1., 2. und 3. sind voneinander unabhängige Punkte :)

Die ISAM-Tables sind sozusagen der alte Standard, Einschränkungen gegenüber den MyISAM-Tables kann man im MySQL-Manual unter Table-Types nachlesen.

Hier das wichtigste:

Zitat:

· Die interne Handhabung einer AUTO_INCREMENT-Spalte. MyISAM aktualisiert diese automatisch bei INSERT / UPDATE. Der AUTO_INCREMENT-Wert kann mit myisamchk zurückgesetzt werden. Das macht AUTO_INCREMENT-Spalten schneller (mindestens 10%), und alten Zahlen werden im Gegensatz zum alten ISAM nicht wieder benutzt. Beachten Sie, dass das alte Verhalten immer noch da ist, wenn ein AUTO_INCREMENT am Ende eines mehrteiligen Schlüssels definiert wird.
B
HTH

RaistlinMajere 24.08.2002 19:15

ich habs bisher auch immer händisch gemacht, hat auch gut gefunzt, nur dachte ich mir wozu gibts dann eine autoincrement-funktion, wenn nicht um einem genau dabei zu helfen?

habs jetzt mal mit TRUNCATE table probiert, nur das funzt, wie käptn eh schrieb nur dann gut, wenn die table wirklich leer ist. ich habe nun das problem, daß ich wenn ich einen eintrag mit einer id zwischen der letzten und der ersten lösche, die id-verschiebung auch gerne automatisieren möchte.
gibts dafür eine funktion, die die id´s automatisch korrekt inkrementiert aneinanderreiht, auch wenn dazwischen welche rausgelöscht wurden, oder muß ich das wieder selbst schreiben?

MrWolf 24.08.2002 20:11

blöde frage:
wo gibts denn das mysql-manual in einer deutschen version. die englische stört zwar nicht, aber auf deutsch ists trotzdem bequemer.

lg

mcs_ 24.08.2002 20:16

http://www.little-idiot.de/mysql/

:) ist zwar nicht DAS manual, aber sonst ganz gut

MrWolf 24.08.2002 20:18

danke:)

kikakater 24.08.2002 20:54

Zitat:

Original geschrieben von RaistlinMajere
ich habs bisher auch immer händisch gemacht, hat auch gut gefunzt, nur dachte ich mir wozu gibts dann eine autoincrement-funktion, wenn nicht um einem genau dabei zu helfen?

habs jetzt mal mit TRUNCATE table probiert, nur das funzt, wie käptn eh schrieb nur dann gut, wenn die table wirklich leer ist. ich habe nun das problem, daß ich wenn ich einen eintrag mit einer id zwischen der letzten und der ersten lösche, die id-verschiebung auch gerne automatisieren möchte.
gibts dafür eine funktion, die die id´s automatisch korrekt inkrementiert aneinanderreiht, auch wenn dazwischen welche rausgelöscht wurden, oder muß ich das wieder selbst schreiben?

Falls die ID Spalte als (Foreign Key) Feld einer anderen Tabelle verwendet wird, wäre es katastrophal eine erneute Durchnummerierung zu machen. Manuelles Hochzählen und Neunummerieren liegt ja in der Verantwortung des Programmierers.

RaistlinMajere 24.08.2002 21:12

Zitat:

Original geschrieben von kikakater


Falls die ID Spalte als (Foreign Key) Feld einer anderen Tabelle verwendet wird, wäre es katastrophal eine erneute Durchnummerierung zu machen. Manuelles Hochzählen und Neunummerieren liegt ja in der Verantwortung des Programmierers.

schon klar, daß die dann kein foreign key sein darf, das gäb dann ein schönes chaos ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag