Condividi
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
3
MySql
01-04-2019
2 Risposte
4743 Visite
+1
Risposte ( 2 approvate )
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 dellaDELETE *
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.
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.