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

    Mysql - Campo auto increment

    Salve a tutti... premetto che ho 17 anni e quindi non sono una cima in php e mysql.. ma diciamo che me la cavo mica male..
    Ora io sto programmando un browser game..
    Ho un problema..
    In questo gioco si possono inviare degli attacchi ( è un game di guerra).
    Ogni attacco è un record nel DB e ha un suo id.
    il campo id è settato come not null AUTO_INCREMENT..
    Io pensavo. Dato che bisogna assegnare una lunghezza del numero intero del campo id, e dato che gli attacchi ogni giorno potrebbero essere un numero elevatissimo, prima o poi il campo id raggiungerebbe il vaolore massimo.. esiste un modo per resettare il campo auto increment senza però perdere i record registrati?
    ad esempio se mi sono rimasti i record 1 15 20 43 e quelli in mezzo sono stati eliminati, esiste un comando con cui il 15 diventa 2 il 20 diventa 3 e il 43 diventa 4?
    in sostanza uno scorrimento degli indici, dato che alcuni non esiston piu.. non so se mi sono spiegato.. ringrazio tt quelli che mi risponderanno
    »-(¯`v´¯)-» || AFRO4EVER - Remember the name

  2. #2
    c'è qualcuno disposto a rispondermi??!!??
    sono sicuro che lo sapete dai!!
    »-(¯`v´¯)-» || AFRO4EVER - Remember the name

  3. #3
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    io penso che tu ti stia creando un problema inesistente, non penso che auto increment abbia un limite ed anche se lo avesse puoi cmq azzerarlo.
    Bye!

  4. #4
    ti sbagli.. in campo auto increment ha un tipo e un limite.. è un INT e ha limite il numero di cifre che vuoi.. io voglio azzerarlo, ma mettendo alle prime posizioni i record che esistono ankora.. non li voglio perdere tutti!
    »-(¯`v´¯)-» || AFRO4EVER - Remember the name

  5. #5
    Originariamente inviato da AFRO4EVER
    ti sbagli.. in campo auto increment ha un tipo e un limite.. è un INT e ha limite il numero di cifre che vuoi.. io voglio azzerarlo, ma mettendo alle prime posizioni i record che esistono ankora.. non li voglio perdere tutti!
    se usi un campo INT che occupa "sempre" 4 byte, il valore massimo come UNSIGNED che puo' raggiungere e' di 4 GIGABYTE.

    Penso che possano giocare senza overflow almeno un paio di generazioni di accaniti giocatori.

    per quanto riguarda il "compattare" l'id, considerandola una azione utile (dubito pero' dell'utilita' di farlo) rimane sempre rapido realizzare una query che copia la tabella "sporca" in una temporanea, eseguire il TRUNCATE TABLE della tabella "sporca" e ricopiare la tabella temporanea sulla tabella ripulita. Omettendo di trasferire il campo autoincrement ovviamente. Si ottiene anche di ottimizzare la tabella compattando gli spazi lasciati vuoti dalle cancellazioni.


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

  6. #6
    e io invece di fare cosi posso fare un drop column eliminare l'id e rimetterlo? o mi si mischiano? ho letto da qlk parte questa cosa
    »-(¯`v´¯)-» || AFRO4EVER - Remember the name

  7. #7
    Originariamente inviato da AFRO4EVER
    e io invece di fare cosi posso fare un drop column eliminare l'id e rimetterlo? o mi si mischiano? ho letto da qlk parte questa cosa
    Tu puoi fare come credi, Io ti ho detto come faccio/farei io.

    se elimini una colonna e poi la ricrei riassegnando l'indice primario e l'autoincrement ti mettera' la numerazione come nuova. Ovviamente numerando le righe come sono trovate fisicamente nella tabella e non con l'ordine cronologico precedente che hai lasciato intendere tu vorresti.

    Ci sara' poi anche la tabella da ottimizzare visto le cancellazioni a cui e' soggetta.

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

  8. #8
    mmm ho capito.. piu che altro dicevo perchè nn so usare le temporary tables.. in termini di query che dovrei fare?
    »-(¯`v´¯)-» || AFRO4EVER - Remember the name

  9. #9
    Originariamente inviato da AFRO4EVER
    mmm ho capito.. piu che altro dicevo perchè nn so usare le temporary tables.. in termini di query che dovrei fare?
    da fare nella stessa sessione di connessione.

    codice:
    create temporary table temp
    select * from tabella
    order by id;
    
    truncate table tabella;
    
    insert into tabella
    (elenco dei campi senza id)
    select elenco dei campi senza id
    from temp;
    se lo provi con phpmyadmin devi fare le tre query nella stessa finestra separate da un punto e virgola di chiusura comando. (come da esempio.

    da php sono tre queries da eseguire una dopo l'altra.

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

  10. #10
    Ho capito!!
    grazie 1000 sei stato gentilissimo e soprattutto paziente eheheh..
    magari lo metto che se l'id supera un tot, esegue la query..
    grazie tantissimo..
    »-(¯`v´¯)-» || AFRO4EVER - Remember the name

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.