MySQL AUTO_INCREMENT question
Θοδωρής Λύτρας
aspirin at myrealbox.com
Wed Dec 20 20:27:57 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 τους πίνακες και να τους ξαναφτιάξω...
--
"Beauty is transitory"
"Beauty survives"
- Mr. Spock & Capt. Kirk, "That which survives", stardate unknown
by Theodore Lytras <aspirin at myrealbox.com>
More information about the Linux-greek-users
mailing list