WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 24.08.2002, 17:50   #1
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard 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?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 24.08.2002, 18:09   #2
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 24.08.2002, 19:04   #3
MrWolf
Master
 
Registriert seit: 19.10.2000
Alter: 52
Beiträge: 671


MrWolf eine Nachricht über ICQ schicken
Standard

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
MrWolf ist offline   Mit Zitat antworten
Alt 24.08.2002, 19:14   #4
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 24.08.2002, 19:15   #5
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

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?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 24.08.2002, 20:11   #6
MrWolf
Master
 
Registriert seit: 19.10.2000
Alter: 52
Beiträge: 671


MrWolf eine Nachricht über ICQ schicken
Standard

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
MrWolf ist offline   Mit Zitat antworten
Alt 24.08.2002, 20:16   #7
mcs_
Elite
 
Registriert seit: 26.06.2001
Alter: 54
Beiträge: 1.351


Standard

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

ist zwar nicht DAS manual, aber sonst ganz gut
mcs_ ist offline   Mit Zitat antworten
Alt 24.08.2002, 20:18   #8
MrWolf
Master
 
Registriert seit: 19.10.2000
Alter: 52
Beiträge: 671


MrWolf eine Nachricht über ICQ schicken
Lächeln

danke
MrWolf ist offline   Mit Zitat antworten
Alt 24.08.2002, 20:54   #9
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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.
kikakater ist offline   Mit Zitat antworten
Alt 24.08.2002, 21:12   #10
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

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
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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.

Gehe zu


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


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