Maison  >  Article  >  base de données  >  MySQL prend-il en charge l'imbrication des transactions ?

MySQL prend-il en charge l'imbrication des transactions ?

藏色散人
藏色散人avant
2019-05-14 15:15:192665parcourir

Dans un développement récent, j'ai rencontré le problème de confusion des données lors de l'utilisation de MySQL et de l'ouverture de transactions plusieurs fois. Le pseudo-code est le suivant :

begin;
# 操作1
begin;
# 操作2
rollback;

Après l'exécution, Opération. 1 sont effectivement écrites, et seules les données de l'opération 2 de sont annulées. Lorsque la première transaction n'est pas validée ou annulée, lorsque la deuxième transaction est démarrée, la première transaction sera automatiquement validée.

Ceci n'est évidemment pas conforme aux attentes psychologiques, et il est également impossible de faire reculer une partie de l'opération. Voici donc la question :

MySQL prend-il en charge l'imbrication des transactions ?

Il est difficile de répondre avec précision à cette question, qu'elle soit prise en charge ou non !

Tout d'abord, appeler start plusieurs fois ne permettra certainement pas l'imbrication des transactions dans MySQL. Après avoir été rappelé par un ami du groupe, j'ai appris qu'il existe une instruction appelée savepoint and rollback to dans MySQL.

Exemple de code :

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
begin;
 
insert into `test`(`name`) values('111');
 
SAVEPOINT p1;
 
insert into `test`(`name`) values('222');
 
ROLLBACK TO p1;
 
commit;

Le résultat final de l'exécution est qu'il n'y a que 111 données dans la table de test, ce qui réalise l'opération de restauration de certaines opérations. De la même manière, cela évite également le problème de démarrer une transaction plusieurs fois, entraînant la validation de la transaction précédente.

Peut-être que les instructions de point de sauvegarde et de restauration ne peuvent pas être appelées imbrication de transactions, et on ne peut pas dire si MySQL prend en charge ou non l'imbrication de transactions. En bref, le point de sauvegarde et la restauration peuvent être utilisés pour obtenir certaines fonctionnalités d'imbrication de 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer