Les transactions MySQL sont principalement utilisées pour traiter des données avec des opérations volumineuses et une grande complexité. Par exemple, dans le système de gestion du personnel, si vous supprimez une personne, vous devez supprimer les informations de base de la personne et également supprimer les informations liées à la personne, telles que la boîte aux lettres, les articles, etc. De cette façon, ces opérations de base de donnéesLe relevé constitue une transaction !
Cet article présente principalement la méthode d'exploitation des transactions MySQL par PHP et analyse en détail les caractéristiques ACID sous forme d'exemples. Il a une bonne valeur de référence. Les amis dans le besoin peuvent s'y référer
. Les exemples de cet article décrivent comment PHP gère les transactions MySQL et sont partagés avec vous pour votre référence. La méthode spécifique est la suivante :
De manière générale, les transactions doivent avoir des caractéristiques ACID. Le soi-disant ACID s'écrit avec les premières lettres des quatre mots Atomic (atomicité), Cohérent (cohérence), Isolé (isolement) et Durable (persistance). Prenons « virement bancaire » comme exemple pour expliquer leur signification. :
① Atomicité : Les instructions qui composent une transaction forment une unité logique, et seule une partie de celle-ci ne peut pas être exécutée. Autrement dit, une transaction est la plus petite unité indivisible. Par exemple : lors du processus de virement bancaire, le montant du transfert doit être soustrait d'un compte et ajouté à un autre compte en même temps. Il n'est pas raisonnable de modifier un seul compte.
② Cohérence : la base de données est cohérente avant et après l'exécution du traitement des transactions. Autrement dit, la transaction doit transformer correctement l'état du système. Par exemple : lors du processus de virement bancaire, soit le montant du virement est transféré d'un compte à un autre, soit les deux comptes restent inchangés, et il n'y a pas d'autre situation.
③ Isolement : une transaction n'a aucun impact sur une autre transaction. C'est-à-dire qu'il est impossible pour une transaction de voir une transaction dans un état incomplet. Par exemple, lors d'un virement bancaire, avant que la transaction de transfert ne soit soumise, une autre transaction de transfert ne peut être qu'en attente.
④ Durabilité : Les effets du traitement des transactions peuvent être enregistrés de manière permanente. À l’inverse, les transactions doivent être capables de résister à toutes les pannes, y compris les pannes de serveur, de processus, de communication, de support, etc. Par exemple : lors du processus de virement bancaire, l'état du compte après le virement doit être enregistré.
En PHP, mysqli a bien encapsulé les opérations associées aux transactions mysql. L'exemple suivant :
Le code est le suivant :
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'"; $sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)"; $mysqli = new mysqli('localhost','root','','DB_Lib2Test'); $mysqli->autocommit(false);//开始事物 $mysqli->query($sql1); $mysqli->query($sql2); if(!$mysqli->errno){ $mysqli->commit(); echo 'ok'; }else{ echo 'err'; $mysqli->rollback(); }
Ici, nous utilisons la série php mysql de fonctions pour effectuer des transactions.
Le code est le suivant :
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'"; $sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)"; $conn = mysql_connect('localhost','root',''); mysql_select_db('DB_Lib2Test'); mysql_query('start transaction'); //mysql_query('SET autocommit=0'); mysql_query($sql1); mysql_query($sql2); if(mysql_errno ()){ mysql_query('rollback'); echo 'err'; }else{ mysql_query('commit'); echo 'ok'; } // mysql_query('SET autocommit=1'); // mysql_query($sql3);
Notez ici :
MyISAM : ne prend pas en charge les transactions et est utilisé pour les programmes en lecture seule pour améliorer les performances
InnoDB : prend en charge les transactions ACID, les verrous au niveau des lignes et la concurrence
Berkeley DB : prend en charge les transactions
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!