Position actuelle: Accueil> Derniers articles> Quel est le rôle de mysqli :: release_savepoint dans le mécanisme de retour de la base de données?

Quel est le rôle de mysqli :: release_savepoint dans le mécanisme de retour de la base de données?

gitbox 2025-08-22

1. Quelles sont les transactions et les mécanismes en arrière?

Avant de plonger dans MySQLI :: release_savepoint , nous devons comprendre quelles sont les transactions et le mécanisme de recul. Les transactions se réfèrent à une collection d'une série d'opérations de base de données qui s'exécutent toutes avec succès ou toutes les échecs et le retour (c'est-à-dire d'annuler toutes les opérations exécutées). Les transactions incluent généralement les quatre caractéristiques suivantes, collectivement appelées caractéristiques acides:

  • Atomicité : toutes les opérations d'une transaction sont entièrement exécutées ou non exécutées du tout.

  • Cohérence : la base de données doit être dans un état cohérent avant et après l'exécution de la transaction.

  • Isolement : L'exécution d'une transaction ne doit pas être perturbée par d'autres transactions.

  • Durabilité : Une fois la transaction terminée, les modifications de la base de données sont permanentes.

Lorsqu'une erreur se produit lors de l'exécution des transactions, le développeur peut utiliser le mécanisme de retour pour restaurer la base de données à son état avant le début de la transaction. Rollback peut être implémenté via une instruction SQL Rollback .

2. Qu'est-ce qu'un point de sauvegarde?

Un point de sauvegarde est un point de marqueur dans une transaction, permettant aux développeurs de définir plusieurs points de contrôle dans une transaction. Lorsqu'une transaction a des problèmes, le développeur peut revenir sur un point de sauvegarde au lieu de reculer complètement la transaction. Cela peut réduire la plage de recul du fonctionnement causée par les erreurs et améliorer l'efficacité.

Par exemple, supposons qu'une transaction nécessite une série d'opérations, et dans certaines étapes, le développeur peut utiliser un point de sauvegarde pour annuler certaines opérations au lieu de perdre toutes les opérations qui ont été exécutées avec succès.

3. Le rôle de la fonction MySQLI :: release_savepoint

La fonction MySQLI :: release_savePoint est utilisée pour libérer (supprimer) un point de sauvegarde créé dans une transaction. Lorsque le développeur confirme qu'un point de sauvegarde n'est plus nécessaire, la fonction peut être appelée pour la libérer, nettoyant ainsi des ressources qui ne sont plus utilisées dans la base de données. L'avantage de cela est qu'il contribue à réduire le nombre de points de sauvegarde dans la transaction et assure une gestion efficace des transactions.

grammaire:
 <span><span>mysqli::</span><span><span class="hljs-title function_ invoke__">release_savepoint</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$savepoint</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ SavePoint : le nom du SavePoint à publier.

Valeur de retour:
  • Succès : retour true .

  • Échec : Retour False et les informations d'erreur peuvent être obtenues via mysqli_error () .

4. Exemple: Utilisez MySQLI :: release_savepoint

Voici un exemple montrant comment utiliser MySQLI :: release_savePoint pour gérer les transactions et les points de sauvegarde:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Créer une connexion de base de données</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-comment">// Vérifiez si la connexion réussit</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Démarrer une transaction</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// Créer un point de sauvegarde</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SAVEPOINT savepoint1"</span></span><span>);

    </span><span><span class="hljs-comment">// Effectuer certaines opérations de base de données</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')"</span></span><span>);
    
    </span><span><span class="hljs-comment">// Créer un autre point de sauvegarde</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SAVEPOINT savepoint2"</span></span><span>);
    
    </span><span><span class="hljs-comment">// Effectuer d&#39;autres actions</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO orders (user_id, product) VALUES (LAST_INSERT_ID(), 'Laptop')"</span></span><span>);

    </span><span><span class="hljs-comment">// Supposons qu&#39;il y ait une erreur ici,Besoin de revenir àsavepoint1</span></span><span>
    </span><span><span class="hljs-comment">// Si vous voulez revenir àsavepoint1,DisponibleROLLBACK TO SAVEPOINTDéclaration</span></span><span>
    </span><span><span class="hljs-comment">// $mysqli-&gt;query("ROLLBACK TO SAVEPOINT savepoint1");</span></span><span>

    </span><span><span class="hljs-comment">// Si tout se passe bien,Libérez le point de sauvegarde</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">release_savepoint</span></span><span>(</span><span><span class="hljs-string">"savepoint1"</span></span><span>);

    </span><span><span class="hljs-comment">// Soumettre les transactions</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// Cattrez des exceptions et annulez toute la transaction</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Rollback des transactions: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}

</span><span><span class="hljs-comment">// Fermez la connexion de la base de données</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans le code ci-dessus:

  • Créez un point de sauvegarde à l'aide de SavePoint .

  • Utilisez MySQLI :: release_savePoint pour libérer Savepoint1 , indiquant que ce point de sauvegarde n'est plus nécessaire.

  • Si la transaction échoue, vous pouvez revenir sur un point de sauvegarde via Rollback sur Savepoint ou Rollback toute la transaction via Rollback .

5. Pourquoi utiliser MySQLI :: release_savepoint ?

La fonction principale de MySQLI :: release_savepoint est de libérer les points de sauvegarde qui ne devaient plus, garantissant ainsi le nettoyage en temps opportun des ressources. Surtout lors de la gestion des transactions complexes, plusieurs points de sauvegarde peuvent être définis. Si ces points de sauvegarde ne sont pas publiés, ils continueront d'occuper les ressources système et affecteront les performances de la base de données. Par conséquent, l'utilisation de mysqli :: release_savepoint pour publier des points de sauvegarde qui ne sont plus nécessaires est un bon moyen de gérer les ressources.

  • Économisez des ressources : relâchez les points de sauvegarde que vous n'avez plus besoin d'éviter de gaspiller les ressources.

  • Améliorer l'efficacité : la réduction du nombre de points de sauvegarde dans une transaction aidera à améliorer l'efficacité de l'exécution des transactions.

  • Maintenabilité améliorée : Dans les transactions longues, la gestion des transactions devient plus claire en libérant des points de sauvegarde qui ne sont plus nécessaires.

6. Résumé

La fonction MySQLI :: release_savepoint joue un rôle important dans le mécanisme de recul des transactions de base de données. Il réduit l'utilisation des ressources et améliore l'efficacité des transactions en aidant à libérer des points de sauvegarde qui ne sont plus nécessaires. Lorsque vous traitez avec des opérations de base de données complexes, l'utilisation rationnelle des points de sauvegarde et de la version_savepoint peut considérablement améliorer la lisibilité, la maintenabilité et les performances du code.