[Tech] autoincrement su mysql

Marco Ermini markoer@usa.net
Lun 4 Ago 2003 14:54:47 CEST


Leonardo Boselli disse:
> Problema: se metto un campo indice come autoincrementante se non
> gli passo un valore esplicito m i mette il numero successivo al più altro
> inserito.
> La regola dovrebbe essere che se gli do un numero (che so a priori
> essere univoco) gli mette quello come indice (e la cosa funziona) ma se
> non glielo do mi dovrebbe prendere il successivo a quello inserito per
> ultimo tra quelli "bassi"...
[...]

No... questo non lo fa nessun database. Intendo: il recupero degli
autoincrement (o counter, parlando come farebbe un DBA Oracle) non piu'
utilizzati non lo fa alcun database, e che io sappia, di proposito.

Piuttosto, per fare quello che vuoi fare tu, ci sono alcuni DB che ti
forniscono degli aiuti, altri con cui devi farlo con il codice. In Oracle,
per esempio, non esiste un campo auto-increment, ma esistono dei counter
"esterni" da cui tu prelevi l'indice da usare, quindi e' triviale
utilizzare dei trigger e delle piccole stored-procedure per fare quello
che vuoi fare tu in automatico. In MySql la vedo piu' dura, anche perche'
se un campo e' dichiarato autoincrement non puoi mettergli tu un valore
arbitrario, e non esistono per adesso ne' trigger ne' stored procedures.

> ossia: se il numero è > 10000 significa che è un numero "ufficiale"di cui
> posso garantire la autenticità, se il numero manca allora il sistema deve
> dare dei numeri convenzionali a partire da 100.
> come faccio allora a far si che se non gli do il numero mi metta ad
> esempio 130 (se l'ultimo inserito in automatico è 129) e non 28000 in
> quanto il numero inserito "a mano"per ultimo è 27999 ?

Come hai intuito, dovresti usare due counter; siccome non ci sono i
counter in MySql, puoi unicamente creare due tabelle con due campi
autoincrement, e pescare da queste due tabelle per creare l'indice per la
tabella che devi riempire, e schiaffarci l'indice a mano.

Oppure, continui ad utilizzare un solo auto-increment, ma aggiungi un
valore numerico che poi visualizzerai come "parte alta" del tuo valore;
per capirci, come chiave primaria usi questo valore numerico (mettiamo di
tre cifre) + il campo autoincrement. Nel caso che tu voglia creare un
valore "basso" metti il valore a 0, altrimenti lo metti a 100.
Nell'applicativo che visualizza questo valore visualizzerai la
composizione del valore numerico + l'auto-increment, quindi avrai dei
valori "alti" (10011, 10013, 10015) e dei valori "bassi" (12, 14, 16).
Questo ovviamente se non ti interessa perdere l'11, il 12, il 14, il
10012, il 10014 e il 10016...


ciao
-- 
Marco Ermini
http://macchi.markoer.org



Maggiori informazioni sulla lista flug-tech