Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [MySql] Problema con auto-increment

    Buona sera a tutti,
    ho un piccolo problema con l'auto-increment del valore ID di una tabella:
    Se elimina una riga, l'auto-increment invece di andare ad occupare l'ID liberato prosegue aumentando ancora di 1 valore... come si potrebbe fare per far in modo che quando viene creata una nuova riga essa prenda il più piccolo ID disponibile rendendo così ordinata la tabella?
    Un computer è incredibilmente stupido
    Un umano è incredibilmente lento...
    Insieme formano un mix esplosivooo! XD

  2. #2
    Il comportamento che stai riscontrando è quello corretto.

    Perchè vuoi ottenere quel comportamento?

  3. #3
    nulla filippo, pensavo solo che la tabella diventasse più ordinata avendo le righe con l'id ordinato, comunque gia che ci penso va bene anche cosè nel senso che concretamente non cambia nulla.
    Un computer è incredibilmente stupido
    Un umano è incredibilmente lento...
    Insieme formano un mix esplosivooo! XD

  4. #4
    Utente bannato
    Registrato dal
    Jan 2009
    Messaggi
    152
    Allora si dovrebbe fare un UPDATE della riga invece di cancellare tutta la riga, e il numerale progressivo rimane al suo posto.
    Allestisci la Query:

    UPDATE `nome_tabella` SET `nome_colonna`='' WHERE `id`='';

    per lasciare tutte le colonne vuote (='') o NULL (dipende da come è strutturata la tabella).
    Poi si dovrebbe disporre di una ulteriore colonna diciamo, di servizio (la puoi aggiungere con Query ALTER TABLE), dove lasciamo nel contempo una flag, per esempio: 'disponibile' dimodochè la riga invece che eliminata diventa "flaggata".


    La successiva Query di INSERT INTO che produrrebbe nuova riga, verrà preceduta da un tentativo con UPDATE che ispeziona se ci sono rows flaggate 'disponibile', se sì sceglie l' ID più basso e fa l' UPDATE in questa; altrimenti, procede con INSERT INTO.

    Anche nel prelevare i dati, la SELECT potrà tener conto della flag, per non stampare campi vuoti.

  5. #5
    E perchè mai uno dovrebbe introdurre tutto quel codice e quell'overhead?

  6. #6
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    pensa che casino di problemi dovrebbe affrontare mysql se dovesse pensare ad otturare i buchi degli id
    - dovrebbe prima verificare se gli id sono sequenziali e senza buchi
    - poi dovrebbe calcolare il minore tra essi
    - poi dovrebbe riempirlo caso mai calcolando se da qualche altra parte qualcuno ha già fatto una query che porta all'inserimento di un nuovo record (quindi che tenta di occupare lo stesso id)
    - e poi ricalcolare il tutto perchè nel frattempo qualcuno potrebbe aver cancellato ... ed allora...

    mi sembra di vedere l'andare su e giù di una massaia stressata che per colpa di marito e figli disordinati non raggiungerà mai l'orgasmo

    Pensa invece ad un problema reale e concreto.
    se tra gli elementi ci deve essere una relazione molti a molti devi ricorrere alla costruzione di tabelle join.
    In queste i riferimenti sono spesso gli id delle altre tabelle.
    Ricompattare gli id nelle altre tabelle comprometterebbe la referenzialità del db.
    Un bel casino!

  7. #7
    Originariamente inviato da filippo.toso
    E perchè mai uno dovrebbe introdurre tutto quel codice e quell'overhead?
    Come non quotarti...
    Un computer è incredibilmente stupido
    Un umano è incredibilmente lento...
    Insieme formano un mix esplosivooo! XD

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.