Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL, PHP Insertion dans plusieurs tables de la base de données

Étant donné que ces deux insertions sont exécutées indépendamment, un autre programme exécuté simultanément peut voir la base de données dans un état où la première insertion est effectuée mais pas la seconde.

Qu'il s'agisse d'un problème ou non dépend de la logique de l'application. Dans votre cas, il est difficile de dire sans informations supplémentaires. Probablement pas. Une transaction financière impliquant deux comptes est un exemple où cela est un problème :vous ne voulez pas que la somme de tous les soldes de compte soit erronée à tout moment.

Si vous pensez en avoir besoin, vous pouvez rendre l'opération atomique au détriment des performances :un autre programme verra la base de données soit avant la première insertion, soit après la seconde insertion. Cela fonctionne comme ceci :

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

Le moteur de stockage doit prendre en charge les transactions, c'est-à-dire qu'il doit être InnoDB . Sinon, cela ne fonctionnera pas silencieusement.