• User Newbie

    mysql insert in due tabelle relazionate 1:1

    Ciao a tutti, ho creato due tabelle che chiamo TABLE USERS e TABLE DATI_USERS in relazione 1:1
    in TABLE DATI_USERS ho impostato come secondary key l'id di TABLE USERS (a sua volta autoincrement)

    Ipotizzando di registrare un nuovo utente ed i relativi dati, mi chiedevo se fosse giusto pensare nel seguente modo:

    insert in TABLE TABLE USERS
    determino last_id di TABLE TABLE USERS
    insert in TABLE DATI_USERS di last_id ed il resto dei campi

    è corretto eseguire queste 3 queries in sequenza? e soprattutto, è l'unico modo?
    Non si può incorrere in qualche errore di mancata sincronizzazione ?

    Grazie


  • ModSenior

    Ciao robco,
    se devi realizzare il tutto in php-mysql c'è la funzione che ti restituisce esattamente con quale ID è stato inserito, operazione sicuramente più corretta per evitare quel tipo di problema.


  • User Newbie

    @Thedarkita said:

    Ciao robco,
    se devi realizzare il tutto in php-mysql c'è la funzione che ti restituisce esattamente con quale ID è stato inserito, operazione sicuramente più corretta per evitare quel tipo di problema.
    ciao, grazie per la risposta
    bhè la funzione sarebbe last_isert_id() (se ce n'è un'altra non lo so :smile5:) ma il punto non è come determinare tale risorsa, ma se sia giusto o meno agire come ho descritto nel precedente messaggio.
    grazie


  • ModSenior

    Insomma, il punto non è esattamente quello. Perchè l'unico problema reale in questi casi è proprio quello di recuperare l'id corretto.


  • User Newbie

    @Thedarkita said:

    Insomma, il punto non è esattamente quello. Perchè l'unico problema reale in questi casi è proprio quello di recuperare l'id corretto.
    ...quindi come si agisce in questi casi?
    grazie


  • ModSenior

    Come hai detto tu, l'importante è utilizzare last_insert_id() o la funzione php fatta appositamente per queste cose, che se utilizzi mysqli trovi qui:
    http://php.net/manual/en/mysqli.insert-id.php


  • User Newbie

    ok, infatti volevo sapere se fosse giusto procedere in questo modo:

    1. insert su A
      2 recupero last_id
    2. insert su B di last_id calcolato in 2

    sò già come si fa, volevo sapere se il procedimento è giusto o se c'è qualcosa di più performante e\o sicuro
    grazie per la disponibilità


  • User Attivo

    Si chiamano "transazioni" ... Commit, rollback ... Cerca su php net


  • User Newbie

    allora il mio procedimento è errato e necessita dei metodi commit ? ?
    ...vorrei capire come muovermi....


  • User Attivo

    No, non è errato... le transazioni sono il TOP per assicurarsi la coerenza dei dati, nonché la sicurezza di poter annullare eventuali operazioni andate male (ROLLBACK), ma uno deve sempre bilanciare importanza del progetto e tempo che ci si può spendere.

    Se sei sicuro di non ritrovarti migliaia di persone a fare simultaneamente il submit di quel form, mysql_insert_id() va più che bene. Per usare le transazioni devi avere tabelle con motore InnoDB, che di solito viene utilizzato per tabelle che devono contenere un enorme numero di record.


  • User Newbie

    @Francesco Di Caprio said:

    No, non è errato... le transazioni sono il TOP per assicurarsi la coerenza dei dati, nonché la sicurezza di poter annullare eventuali operazioni andate male (ROLLBACK), ma uno deve sempre bilanciare importanza del progetto e tempo che ci si può spendere.

    Se sei sicuro di non ritrovarti migliaia di persone a fare simultaneamente il submit di quel form, mysql_insert_id() va più che bene. Per usare le transazioni devi avere tabelle con motore InnoDB, che di solito viene utilizzato per tabelle che devono contenere un enorme numero di record.
    ok, grzie, diciamo che ora la situazione è più chiara 🙂
    a dir il vero non c'è il rischio di molte insert simultanee, magari decido se utilizzare o meno le transazioni, che non ho mai fatto prima d'ora (se avete un esempio, link, grazie 1000)
    Riguardo il db posso limitarmi al myisam.