MySQL AUTO_INCREMENT question

rouvas at di.uoa.gr rouvas at di.uoa.gr
Thu Dec 21 01:52:43 EET 2006


> Στις Τετάρτη 20 Δεκέμβριος 2006 17:52, ο/η Constantine Dokolas έγραψε:
>> Θοδωρής Λύτρας wrote:
>> > Έχω μια βάση, έναν πίνακα και ένα πεδίο πρωτεύοντος κλειδιού στο
>> οποίο έχω την επιλογή AUTO_INCREMENT. Προσθέτω έστω 10 εγγραφές και
>> το κλειδί μου φτάνει στην τιμή 10. Ακολούθως σβήνω τις πρώτες 5
>> εγγραφές. Παρατηρώ οτι στην επόμενη εγγραφή που θα προσθέσω, το
>> κλειδί θα έχει την τιμή 11.
>> >
>> > Υπάρχει κανένας τρόπος να μηδενίσω τον μετρητή του? Να του πω να
>> ξαναξεκινήσει από το 1, να συμπληρώσει κανονικά τις τιμές μέχρι το 5
>> και μετά να συνεχίσει από το 11 και πάνω? Με άλλα λόγια, να
>> εκμεταλλεύεται και τις τιμες κλειδιού που απελευθερώνω.
>>
>> Αυτό που ζητάς δεν έχει νόημα σε καμμία RDBMS. Ο σκοπός αυτού του
>> είδους πεδίου είναι να δίνει μοναδικές (για το συνδυασμό
>> πίνακας/πεδίο) αυξανόμενες αριθμητικές τιμές. Το "μοναδικές" σημαίνει
>> ότι δεν θα δώσει ποτέ την ίδια τιμή ξανά. Γι' αυτό και στη περίπτωση
>> που χρησιμοποιούνται transactions παρατηρείται το φαινόμενο να
>> χάνονται τιμές (συμβαίνει όταν έχει "καταχωρηθεί" εγγραφή που μετά
>> αποσύρθηκε όταν έγινε ABORT το transaction).
>>
>> Συνήθως υπάρχει η δυνατότητα να δώσεις εσύ κάποια τιμή στον μετρητή
>> για να συνεχίσει από αυτή. Αυτό όμως είναι πρόβλημα γιατί τα
>> πρωτεύοντα κλειδιά πρέπει να είναι μοναδικά και όταν ο μετρητής δώσει
>> τιμή που υπάρχει ήδη τότε θα έχεις πρόβλημα (θα αρνείται να
>> καταχωρήσει την εγγραφή και δεν θα καταχωρεί μέχρις ότου ο μετρητής
>> δώσει τιμή που δεν υπάρχει ήδη).
>>
>> Επίσης κάποιες RDBMS δίνουν τη δυνατότητα να "διορθώσεις" τον μετρητή
>> (να ορίσεις να συνεχίσει από την επόμενη της τελευταίας μεγαλύτερης
>> τιμής).
>
> Ένα βασικό νόημα αυτού που αναζητώ είναι το εξής: φτιάχνω την εφαρμογή
> μου σε  PHP, την δοκιμάζω με υποθετικές εγγραφές, κάνω debug, σβήνω μετά
> από το mysql  monitor τις εγγραφές αυτές, και θέλω ο μετρητής να
> επιστρέψει στο 1 για να  κάνω κι άλλες δοκιμες. Αν δεν υπάρχει κάποιος
> τρόπος γι'αυτό θα πρέπει να  κάνω DROP τους πίνακες και να τους
> ξαναφτιάξω...

Με την προϋπόθεση ότι διαγράφεις εντελώς όλα τα records του πίνακα που σε
ενδιαφέρει (π.χ. truncate), μπορείς να πεις στην MySQL να κάνει reset τον
σχετικό counter. Δε γνωρίζω ακριβώς την εντολή (μου φαίνεται ότι γίνεται
μέσως της analyze), αλλά το PHPMyADMIN σίγουρα το κάνει (το έχω κάνει).

Μιας και είναι OSS θα μπορούσες να δεις τι χρησιμοποιεί.

-Στάθης

>
> --
> "Beauty is transitory"
> "Beauty survives"
> 	- Mr. Spock & Capt. Kirk, "That which survives", stardate unknown
> by Theodore Lytras <aspirin at myrealbox.com>
>
>
> --
> linux-greek-users mailing list -- http://lists.hellug.gr






More information about the Linux-greek-users mailing list