Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL, PHP Inserisci in più tabelle nel database

Poiché questi due inserimenti vengono eseguiti indipendentemente, un altro programma in esecuzione contemporaneamente potrebbe vedere il database in uno stato in cui il primo inserimento è terminato ma il secondo no.

Se questo è un problema o meno dipende dalla logica dell'applicazione. Nel tuo caso è difficile dirlo senza ulteriori informazioni. Probabilmente no. Una transazione finanziaria che coinvolge due conti è un esempio in cui questo si trova un problema:non vuoi che la somma di tutti i saldi del conto sia errata in qualsiasi momento.

Se ritieni di aver bisogno di questo, puoi rendere l'operazione atomica a scapito delle prestazioni:un altro programma vedrà il database prima del primo inserimento o dopo il secondo inserimento. Funziona così:

$result = FALSE;
if (mysql_query('BEGIN')) {
    if (mysql_query($query1) &&
        mysql_query($query2))
        $result = mysql_query('COMMIT'); // both queries looked OK, save
    else
        mysql_query('ROLLBACK'); // problems with queries, no changes
}

Il motore di archiviazione deve supportare le transazioni, ovvero deve essere InnoDB . Altrimenti questo non funzionerà silenziosamente.