sql >> Base de Datos >  >> RDS >> Mysql

MYSQL, inserción de PHP en múltiples tablas en la base de datos

Dado que estas dos inserciones se ejecutan de forma independiente, otro programa que se ejecute simultáneamente podría ver la base de datos en un estado en el que se realiza la primera inserción pero no la segunda.

Si esto es un problema o no depende de la lógica de la aplicación. En su caso, es difícil saberlo sin información adicional. Probablemente no. Una transacción financiera que involucra dos cuentas es un ejemplo donde esto es un problema:no desea que la suma de todos los saldos de la cuenta sea incorrecta en ningún momento.

Si cree que necesita esto, puede hacer que la operación sea atómica a costa del rendimiento:otro programa verá la base de datos antes de la primera inserción o después de la segunda inserción. Funciona así:

$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
}

El motor de almacenamiento debe admitir transacciones, es decir, debe ser InnoDB . De lo contrario, esto no funcionará en silencio.