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< est apparu. Les données de 🎜> 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;
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!