Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Auto_increment

  1. #1

    Auto_increment

    Buongiorno,
    la mia è la classica domandina semplice semplice, che a un neofita però può apparire pesante come un macigno... :-)

    Nella mia mysql_table ho creato il classico "campo id" che ha come caratteristiche:

    Campo......Tipo......Null.....Predefinito......... ....Extra
    .....id..........int(5)....No........Nessuno...... AUTO_INCREMENT

    Vorrei sapere se esiste un modo per evitare che il valore auto-incrementale del campo "memorizzi" anche i record che sono stati CANCELLATI. Per essere più chiari, se ho 2 record di cui l'ultimo riporta un valore id = 10 (avendo io cancellato gli altri 8 record!), esisterebbe la maniera per avere un valore del campo id = 1, 2 ?
    Grazie a tutti quelli che avranno la bontà di rispondermi!

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: Auto_increment

    Originariamente inviato da carloemilio
    Buongiorno,
    la mia è la classica domandina semplice semplice, che a un neofita però può apparire pesante come un macigno... :-)

    Nella mia mysql_table ho creato il classico "campo id" che ha come caratteristiche:

    Campo......Tipo......Null.....Predefinito......... ....Extra
    .....id..........int(5)....No........Nessuno...... AUTO_INCREMENT

    Vorrei sapere se esiste un modo per evitare che il valore auto-incrementale del campo "memorizzi" anche i record che sono stati CANCELLATI. Per essere più chiari, se ho 2 record di cui l'ultimo riporta un valore id = 10 (avendo io cancellato gli altri 8 record!), esisterebbe la maniera per avere un valore del campo id = 1, 2 ?
    Grazie a tutti quelli che avranno la bontà di rispondermi!
    Togli il flag AUTO_INCREMENT dal campo, hai questo flag subito dopo la definizione del tipo.

  3. #3
    Grazie per la tua risposta Joe Taras,

    purtroppo il tuo consiglio non posso metterlo in pratica... La mysql_table mi serve per la registrazione di visitatori del mio sito internet; per autenticarli è quindi neccessario un controllo di tipo numerico (tramite appunto id!) che lavora attraverso un Indice con "Chiave PRIMARY" di "Tipo BTREE" e che deve essere "Unica".
    In parole povere, l'Id di ogni utente deve essere diverso uno dall'altro: da qui l'esigenza dell'AUTO_INCREMENT. Io però vorrei eliminare i "valoro vuoti" che rimangono dopo eventuali cancellazioni dall'elenco degli utenti registrati... Si potrà fare? Boh!

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da carloemilio
    Grazie per la tua risposta Joe Taras,

    purtroppo il tuo consiglio non posso metterlo in pratica... La mysql_table mi serve per la registrazione di visitatori del mio sito internet; per autenticarli è quindi neccessario un controllo di tipo numerico (tramite appunto id!) che lavora attraverso un Indice con "Chiave PRIMARY" di "Tipo BTREE" e che deve essere "Unica".
    In parole povere, l'Id di ogni utente deve essere diverso uno dall'altro: da qui l'esigenza dell'AUTO_INCREMENT. Io però vorrei eliminare i "valoro vuoti" che rimangono dopo eventuali cancellazioni dall'elenco degli utenti registrati... Si potrà fare? Boh!
    Ciao,
    scusa ma stai facendo un pò di confusione.

    Un conto è avere una chiave in auto incremento un conto è avere una chiave univoca.

    Se togli l'autoincremento, la sola differenza è che il valore te lo dovrai calcolare mediante un algoritmo, non sto minimamente dicendo che devi avere valori duplicati.

    Poi il fatto che l'ID debba essere intero, beh quello te lo determina il tipo del campo.

    Con un autoincrementale non potrai mai coprire i "valori vuoti" proprio per sua definizione.

  5. #5
    potresti darmi un esempio dell'algoritmo di cui mi hai parlato? GRAZIE!

  6. #6
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da carloemilio
    potresti darmi un esempio dell'algoritmo di cui mi hai parlato? GRAZIE!
    Un esempio, prima di salvare ti fai una SELECT MAX(id) FROM tabella e sommi uno. Il risultato ti da una chiave univoca, oppure (la scrivo di getto verifica se va bene):

    SELECT MIN(id) FROM tabella t1
    WHERE not exists (SELECT 'x' FROM tabella t2
    WHERE t2.id = t1.id+1)

    ed al risultato ci sommi uno.

    Ma ti puoi sbizzarrire come meglio credi, insomma l'auto-increment non è la panacea di tutti i mali.

  7. #7
    la chiave primaria serve a identificare un record non a numerarlo.

    Quindi lascialo cosi' come e' non badare agli id mancanti. Se proprio ti danno fastidio assegna tu il numerello che ti pare durante l'insert o con l'update. Se il numerello id che imponi e' vacante verra' assegnato al record a prescindere dall'auto increment.

    L'ordinamento avviene tramite la clausola order by e non con la successione degli id. con un INT hai 4 byte numerici e quindi hai oltre 4 miliardi di valori a disposizione. Se vuoi contare gli id presenti userai COUNT(*)

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Grazie mille a tutti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.