MySQL AUTO_INCREMENT question

Constantine Dokolas cdokolas at Sunsoftgr.com
Fri Dec 22 11:28:37 EET 2006


V13 wrote:
> On Wednesday 20 December 2006 20:27, Θοδωρής Λύτρας wrote:
>> Ένα βασικό νόημα αυτού που αναζητώ είναι το εξής: φτιάχνω την εφαρμογή μου
>> σε PHP, την δοκιμάζω με υποθετικές εγγραφές, κάνω debug, σβήνω μετά από το
>> mysql monitor τις εγγραφές αυτές, και θέλω ο μετρητής να επιστρέψει στο 1
>> για να κάνω κι άλλες δοκιμες. Αν δεν υπάρχει κάποιος τρόπος γι'αυτό θα
>> πρέπει να κάνω DROP τους πίνακες και να τους ξαναφτιάξω...
> 
> Tote ayto poy theleis den einai to autoincrement, alla 'ena' query to opoio na 
> soy epistrefei ton proto eleythro arithmo. Sth synexeia orizeis mono soy to 
> id, symfona me to apotelesma toy query...
> 
> Prosopika to kano ayto me kodika kai xrisimopoio to parakato:
> 
> SELECT MIN(a.$efield-1) AS id, COUNT(a.$efield-1) AS cnt
>             FROM $etable a LEFT JOIN $etable b ON b.$efield=a.$efield-1
>             WHERE b.$efield IS NULL AND a.$efield>1 $where;
> 
> Opoy $efield einai to escaped onoma toy pedioy kai $etable einai to escaped 
> onoma toy pinaka
> 
> An to cnt den einai 0, tote to id einai to epomeno eleythero id. 
> 
> An to cnt einai 0 tote shmainei oti den yparxei keno h den yparxoyn eggrafes, 
> opote kaneis:
> 
> SELECT MAX($efield)+1 AS id, COUNT($efield) AS cnt FROM $etable
> 
> kai elegxeis kai pali to cnt. An to cnt einai 0 shmainei oti den yparxoyn 
> eggrafes kai arxizeis apo to 0. An den einai 0, tote to id exei to epomeno 
> eleythero ID.
> 
> Ta parapano doylevoyn se postgresql kai elpizo na doylevoyn kai se mysql. Tha 
> mporoyse na ginei kai me ena query mono, alla tha itan elafros pio polyploko 
> kai tha xreiazotan kapoies synartiseis opos to COALESCE...

Θοδωρή:
Αυτά βέβαια αν δεν σε πειράζει που κλειδώνεται όλος ο πίνακας μέχρι το
τέλος του transaction. Αν βέβαια σνομπάρεις τα transaction... χε χε χε...
θα έχει πλάκα.

Το πλεονέκτημα του αυτόματου αριθμητή είναι ότι δεν κλειδώνει τίποτα.

> Opos katalabaineis den mporeis na kaneis kati tetoio se megaloys pinakes giati 
> tha kathysterei xoris logo.

Αν έχεις (όπως είναι λογικό) index στο πεδίο, δεν κοστίζει και πολύ.

Καλύτερα να κάνεις truncate, αν κάνει τη δουλειά που θες, όπως είπε και
ένας φίλος νωρίτερα, αν και οι RDBMS που έχουν relational integrity δεν σε
αφήνουν πάντα να το κάνεις γιατί η truncate δεν μπορεί να το παρακάμψει.
Τουλάχιστον ο SQL Server έτσι παίζει και λογικά και οι περισσότεροι (είναι
θέμα relational integrity).

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