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

    Recuperare ultimo id autoincrementale dopo insert in MYSQL

    Salve,
    Dopo la query di insert vorrei recuperare il valore id
    auto incrementale che il database ha appena assegnato alla nuova riga appena inserita.

  2. #2
    SELECT LAST_INSERT_ID();
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  3. #3
    ciao,

    se l'id e' autoincrementante puoi anche fare :

    SELECT MAX(ID) FROM TABELLA ....
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  4. #4
    Originariamente inviato da bomberdini
    se l'id e' autoincrementante puoi anche fare :

    SELECT MAX(ID) FROM TABELLA ....
    Bomberdini, c'è una grossa differenza: LAST_INSERT_ID() è thread safe. Non c'è nessuna garanzia che, dopo che hai inserito un record ma prima che tu esegua quella query, non intervenga un altro inserimento da un altro thread. LAST_INSERT_ID() ti restituisce lo stesso l'ultimo valore inserito in questo thread
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  5. #5
    sisi LAST_INSERT_ID() su un programma multithread e' sicuramente piu' valido.

    Non so se chi ha fatto la richiesta ha un programma multithread. Qualora avesse un unico processo gli ho dato un altra alternativa
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  6. #6
    Beh in genere qui fanno domande per applicazioni web...

    Se poi vogliamo essere pignoli, LAST_INSERT_ID() è migliore perché non legge la tabella (nemmeno i metadati)... ma sto veramente esagerando, scusa la pignoleria
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  7. #7
    nessun problema.

    La funzione LAST_INSERT_ID() invece come opera? mette un lock sulla tabella non permettendo altre transazioni?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  8. #8
    No nessun lock perché non accede alla tabella, semplicemente l'ultimo autoincrement che hai inserito rimane memorizzato in memoria, nelle variabili di sessione.

    Ancora meglio, puoi chiamare la funzione mysql_insert_id() che è più veloce.

    L'unico problema di LAST_INSERT_ID è che dentro le stored procedure ti dice l'ultimo id inserito PRIMA che iniziasse la stored procedure. Dopo la procedura invece torna a funzionare nel modo che ti aspetti. In pratica:

    CREATE PROCEDURE xxx() ...
    BEGIN
    INSERT INTO t (id, ...) VALUES (2, ...);
    SELECT LAST_INSERT_ID();
    END;

    INSERT INTO t (id, ...) VALUES (1, ...);
    CALL xxx();
    SELECT LAST_INSERT_ID();

    ...visualizza prima 1 e poi 2 (non due volte 2 come potresti pensare).
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  9. #9
    Perche' dici che restituisce prima 1 e poi 2?

    ce prima la insert di id = 2 e poi di id=1, quindi dovrebbe restituire 2 e poi 1.

    Errore di battitura o mi sfugge qualcosa?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  10. #10
    In pratica il valore si aggiorna quando termina la procedura. Era questa la stranezza
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

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.