Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di HammerFist
    Registrato dal
    May 2005
    Messaggi
    1,110

    Azzerare le chiavi primarie di mysql

    qual'è la funzione che permette di far ripartire da 1 le chiavi primarie su mysql?

  2. #2
    TRUNCATE TABLE `nome_tabella`;

  3. #3
    NOTA: questa funzione SVUOTA anche il contenuto della tabella

    NOTA2: credo che truncate vada solo su mysql 4 e superiori, puoi anche usare semplicemente DELETE * FROM nometabella

  4. #4
    Si ma delete non ti azzera il contatore delle chiavi primarie

  5. #5
    Scusatemi ma un metodo semplice per far si che in un novo insrimento si vada a prendere la kiave ke stata cancella?

    Esempio.

    1 davide
    2 marco
    3 chaira

    ora se cancello davide e inserisco daniele,
    daniela sarà 4 ma io vorrei che fosse 1 oppure che fosse 3 e cioè:

    1 marco
    2 chiara
    3 daniele.

    Mi sono spiegato?

  6. #6
    Originariamente inviato da zero85
    Si ma delete non ti azzera il contatore delle chiavi primarie
    se non usi il where se non erro lo fa ^^

  7. #7
    Originariamente inviato da daniele_dll
    se non usi il where se non erro lo fa ^^
    La tabella viene reinizializzata solo con TRUNCATE TABLE


    Originariamente inviato da devilchan
    Scusatemi ma un metodo semplice per far si che in un novo insrimento si vada a prendere la kiave ke stata cancella?
    devi attribuire tu in modo esplicito nell'insert il valore dell'id liberato



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

  8. #8
    http://dev.mysql.com/doc/mysql/en/truncate.html

    .
    .
    .

    For other storage engines, TRUNCATE TABLE differs from DELETE FROM in the following ways from MySQL 4.0 and up:

    *

    Truncate operations drop and re-create the table, which is much faster than deleting rows one by one.
    *

    Truncate operations are not transaction-safe; you get an error if you have an active transaction or an active table lock.
    *

    The number of deleted rows is not returned.
    *

    As long as the table definition file tbl_name.frm is valid, the table can be re-created as an empty table with TRUNCATE TABLE, even if the data or index files have become corrupted.
    *

    The table handler does not remember the last used AUTO_INCREMENT value, but starts counting from the beginning. This is true even for MyISAM and InnoDB, which normally does not reuse sequence values.

    In MySQL 3.23, TRUNCATE TABLE is mapped to COMMIT; DELETE FROM tbl_name, so it behaves like DELETE. See Section 13.2.1, “DELETE Syntax”.

    TRUNCATE TABLE is an Oracle SQL extension. This statement was added in MySQL 3.23.28, although from 3.23.28 to 3.23.32, the keyword TABLE must be omitted.
    solo da MySQL 4.0 ha cambiato modo di operare perché prima era un normalissimo delete senza where, comunque mi sembra troppo strano che la chiavi non vengano resettate se viene eliminato tutto, anche perché specifica chiaramente che (nella pagina riguardante il delete)

    If you issue a DELETE statement with no WHERE clause, all rows are deleted. A faster way to do this, when you don't want to know the number of deleted rows, is to use TRUNCATE TABLE. See Section 13.2.9, “TRUNCATE Syntax”.
    Se usi un comando DELETE senza la clausola WHERE tutte le righe vengono eliminate. Un modo più veloce di farlo, quando a te non interessa sapere il numero di righe eliminate, è l'uso di TRUNCATE TABLE
    ora come possono dire usa truncate al posto di delete se hanno comportamenti differenti che non vengono specificati?
    Anche perché ... (tanto per essere precisi) ...

    In MySQL 3.23, DELETE without a WHERE clause returns zero as the number of affected records.
    ovvero solo da MySQL 4 un comando delete senza where restituisce il numero di righe ... quindi prima di mysql 4 non c'era assolutamente e totalmente nessuna differenza ... ma cmq ritengo ancora assurdo il fatto che non vi sia un modo di resettare le chiavi usando la sintassi standard

    boh ... i misteri dell'informatica

  9. #9
    Originariamente inviato da daniele_dll
    http://dev.mysql.com/doc/mysql/en/truncate.html

    boh ... i misteri dell'informatica
    Daniele... siamo alla 5.0.12345677

    TRUNCATE esegue due operazioni:

    DELETE table + OPTIMIZE TABLE table.

    La tabella myisam non ottimizza mai gli spazi per conto suo. Le InnoDB invece si.


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

  10. #10
    lo so bene ... ma su MOLTI host c'è installata la 3.x

    quindi uno deve anche guardare a quello
    a me non me frega nulla, io ho la 4.0 e a breve avrò la 4.1 ... ma molti altri hanno la 3.x

    cmq il truncate nn ottimizza una fava ... elimina e ricrea la tabella quindi non gli serve ottimizzare

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.