Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [mysql] auto increment circolare?

    ragazzi c'è un modo per dire a mysql di usare gli spazi id vuoti quando inserisce un nuovo record nel caso il campo int primary abbia raggiunto il suo limite del range?

    grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    E' una pessima idea. Se non ti basta un campo di tipo int usa bigint.

  3. #3
    Originariamente inviato da nicola75ss
    E' una pessima idea. Se non ti basta un campo di tipo int usa bigint.

    no perchè a me quel campo id non serve a nulla... perchè ogni 1-2 giorni la tabella viene quasi completamente svuotata per analizzare i dati e inserirli in maniera aggregata in un'altra tabella.


    quindi con il passsare del tmepo si formerà un buco gigante all'inizio con i record che partono dall'id 300.000 ecc

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    E allora fai semplicemente una insert into select per travasare i dati da una tabella all'altra.

  5. #5
    Originariamente inviato da nicola75ss
    E allora fai semplicemente una insert into select per travasare i dati da una tabella all'altra.

    no perchè non devo semplicmente travasare ma i dati devono essere elaborati e poi inseriti in una nuova tabella


    ma questo non è il punto il fatto è che quando svuoto la tabella di prima si forma quel buco degli id che potrebbe essere riutilizzato se l'auto_increment in qualche modo lo prevedesse..

    al massimo visto che sto campo id non lo uso proprio lo elimino del tutto, però poi avrei una tabella senza il campo primary...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non capisco perchè abbiate questa fissa dei buchi degli id.
    L'id è solo un identificativo univoco dei record. Qualsiasi escamotage per "riempire i buchi" è del tutto inutile e fuori luogo.

    Per avere degli id contigui ti basta fare quanto scritto sopra, una insert into select in una nuova tabella in cui passi tutti i campi tranne la chiave primaria. Nella nuova tabella i record avranno tutti numeri progressivi. Puoi anche ricorrere a una tabella temporanea

    codice:
    create temporary table tabella select * from originale;
    truncate originale;
    insert into originale (elenco_campi_tranne_id) select elenco_campi_tranne_id from tabella

  7. #7
    Originariamente inviato da nicola75ss
    Non capisco perchè abbiate questa fissa dei buchi degli id.
    L'id è solo un identificativo univoco dei record. Qualsiasi escamotage per "riempire i buchi" è del tutto inutile e fuori luogo.

    Per avere degli id contigui ti basta fare quanto scritto sopra, una insert into select in una nuova tabella in cui passi tutti i campi tranne la chiave primaria. Nella nuova tabella i record avranno tutti numeri progressivi. Puoi anche ricorrere a una tabella temporanea
    no forse non ci siamo spiegati a me le tabelle servono tutte e 2...

    la prima contiene i dati a cascata non elaborati la seconda i dati dopo alcune elaborazioni..

    visto che nella prima vengono fatti molti inserimenti fra un pò raggiungerò il limtie dell int id...
    perciò mi chiedevo se potevo riutilizzare gli id disponibili

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ti ho già risposto. Se non ti bastano 4 miliardi e passa di id disponibili con un campo di tipo int usa un campo bigint.

    Se la tabella è oggetto di cancellazioni frequenti ti basta lanciare un optimize table per ottimizzarla. Punto.

  9. #9
    vabè il campo bigint dovrebbe essere abbastanza sufficiente da durare un bel pò di anni...

    il problema è che prima o poi il range verrà comunque esaurito....

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Il valore massimo di un campo bigint è

    18446744073709551615

    io non riesco nemmeno a leggerlo.

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.