Reset contatore auto-increment chiave primaria in MySql

Ho delle tabelle in mysql, con chiavi primarie (primary key), chiavi esterne (foreign key) ed altri campi. Sulle chiavi primarie sono impostati dei contatori di auto-incremento, è accaduto che le voci di alcuni records sono state cancellate nel "centro" della tabella, c'è un modo semplice per "aggiustare" il contatore in modo che non ci sia spazio tra il numero di un record ed un altro, e ritornino ad essere perfettamente in sequenza, tipo così:

Quindi da id = {1,13,27,42,59} per andare a id = {1,2,3,4,5}

Se qualcuno può aiutarmi, Grazie.

Risolta 1
MySql 01-04-2019 2 Risposte 2209 Visite +1
Francesco Treppina

Francesco Treppina

Autore di questa domanda

Risposte ( 2 approvate )

  1. Federico Di Sutta
    +1
    01-04-2019 16:01:46
    Rispondi

    Attenzione, cambiare la sequenza dei valori incrementali delle chiavi primarie potrebbe essere molto pericoloso, rischi di non avere più l'integrità referenziale con le tabelle correlate.

     

    Eseguire un aggiornamento del valore identificativo univoco dei records (primary key) comporterebbe andare a fare anche un aggiornamento dei valori referenziati nelle altre tabelle, un lavoro pazzesco e soggetto a facili errori. Senza tenere conto inoltre che utenti utilizzatori dell'applicativo basato su questa tua sorgente dati potrebbero giàa vere dei riferimenti con questi id (pensa banalmente ad un sito web con delle url dinamiche salvate tra i preferiti, cambiando il riferimento dell'id non troverebbero più la pagina).

     

    E poi perché mai vuoi avere questa sequenza così ben allineata? Che problema ti porta se ci sono dei "buchi" tra i valori dei records delle tue tabelle, è normalissimo che i records vengano cancellati alterandone la sequenza numerica creata del contatore auto incrementale.

  2. Giacomo Barrile
    0
    01-04-2019 16:10:49
    Rispondi

    Come già spiegatoti, facendo un aggiornamento sulla primary key come tu dici andresti a compromettere l'integrità referenziale della tabella in oggetto, è sbagliato sia logicamente che tecnicamente, quindi te lo sconsiglio fortemente.

     

    Se stai solo facendo dei test e delle prove, e vuoi resettare il contatore auto-increment facendo ripartire il conteggio da zero (o meglio da uno) con la sequenza allineata dei valori interi, ti basta cancellare la colonna interessata e ricrearla, oppure potresti troncare la tabella con l'istruzione sql TRUNCATE TABLE, bada bene però che questa cancellerà anche tutti i records ivi presenti, però a differenza della DELETE * che cancella solo i records, con TRUNCATE tutto viene "resettato", poiché con questa istruzione il motore di MySql non fà altro che distruggere e ricreare nuovamente la tabella esattamente per come l'avevi definita con tutti i suoi campi e chiave primaria, pertanto anche il contatore auto incrementale viene ricreato e ricomincia la sequenza di interi dall'inizio.

     

    Diversamente non toccare nulla perché faresti un sacco di danno.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

 Domanda Precedente

 Elenco Domande 

Domanda Successiva