MySQL AUTO_INCREMENT question

Constantine Dokolas cdokolas at Sunsoftgr.com
Wed Dec 20 17:52:29 EET 2006


Θοδωρής Λύτρας wrote:
> Θα ήθελα να ρωτήσω το εξής, μια λεπτομέρεια στην οποία δεν μπόρεσα να βρώ την 
> απάντηση, όποιος ξέρει από MySQL ας μου πει:
> 
> Έχω μια βάση, έναν πίνακα και ένα πεδίο πρωτεύοντος κλειδιού στο οποίο έχω την 
> επιλογή AUTO_INCREMENT. Προσθέτω έστω 10 εγγραφές και το κλειδί μου φτάνει 
> στην τιμή 10. Ακολούθως σβήνω τις πρώτες 5 εγγραφές. Παρατηρώ οτι στην 
> επόμενη εγγραφή που θα προσθέσω, το κλειδί θα έχει την τιμή 11. 
> 
> Υπάρχει κανένας τρόπος να μηδενίσω τον μετρητή του? Να του πω να ξαναξεκινήσει 
> από το 1, να συμπληρώσει κανονικά τις τιμές μέχρι το 5 και μετά να συνεχίσει 
> από το 11 και πάνω? Με άλλα λόγια, να εκμεταλλεύεται και τις τιμες κλειδιού 
> που απελευθερώνω.

Αυτό που ζητάς δεν έχει νόημα σε καμμία RDBMS. Ο σκοπός αυτού του είδους
πεδίου είναι να δίνει μοναδικές (για το συνδυασμό πίνακας/πεδίο)
αυξανόμενες αριθμητικές τιμές. Το "μοναδικές" σημαίνει ότι δεν θα δώσει
ποτέ την ίδια τιμή ξανά. Γι' αυτό και στη περίπτωση που χρησιμοποιούνται
transactions παρατηρείται το φαινόμενο να χάνονται τιμές (συμβαίνει όταν
έχει "καταχωρηθεί" εγγραφή που μετά αποσύρθηκε όταν έγινε ABORT το
transaction).

Συνήθως υπάρχει η δυνατότητα να δώσεις εσύ κάποια τιμή στον μετρητή για να
συνεχίσει από αυτή. Αυτό όμως είναι πρόβλημα γιατί τα πρωτεύοντα κλειδιά
πρέπει να είναι μοναδικά και όταν ο μετρητής δώσει τιμή που υπάρχει ήδη
τότε θα έχεις πρόβλημα (θα αρνείται να καταχωρήσει την εγγραφή και δεν θα
καταχωρεί μέχρις ότου ο μετρητής δώσει τιμή που δεν υπάρχει ήδη).

Επίσης κάποιες RDBMS δίνουν τη δυνατότητα να "διορθώσεις" τον μετρητή (να
ορίσεις να συνεχίσει από την επόμενη της τελευταίας μεγαλύτερης τιμής).

Σημείωση: η εμπειρία μου στη διαθεσιμότητα των παραπάνω δυνατοτήτων
περιορίζεται στον MS SQL Server 2000+.

Doc

-- 
  Theory asserts that, although in theory there should be no
difference between theory and practice, in practice there IS
difference between theory and practice.




More information about the Linux-greek-users mailing list