Position actuelle: Accueil> Derniers articles> Guide de l'utilisation des mécanismes de contrôle et de verrouillage de la concurrence entre les bases de données PHP et Oracle

Guide de l'utilisation des mécanismes de contrôle et de verrouillage de la concurrence entre les bases de données PHP et Oracle

M66 2025-07-13

Guide de l'utilisation des mécanismes de contrôle et de verrouillage de la concurrence entre les bases de données PHP et Oracle

Lors du développement d'applications Web, le mécanisme de contrôle et de verrouillage simultané de la base de données est crucial. En particulier dans les scénarios de concurrence élevés, si l'accès simultané aux données n'est pas correctement géré, la cohérence des données et les problèmes d'intégrité peuvent être causés. Cet article présentera comment utiliser le contrôle de la concurrence et le mécanisme de verrouillage de la base de données Oracle dans PHP, afficher deux méthodes de contrôle de concurrence courantes - contrôle de concurrence pessimiste et contrôle optimiste de concurrence, et fournir des exemples de code pertinents.

Contrôle simultané pessimiste

Le contrôle de concurrence pessimiste fait référence aux données de verrouillage avant d'effectuer une opération pour empêcher d'autres utilisateurs de modifier les mêmes données en même temps. Dans la base de données Oracle, vous pouvez utiliser l'instruction FOR UPDATE pour obtenir un contrôle de concurrence pessimiste.

Voici un exemple de code utilisant le contrôle de concurrence pessimiste en PHP:

 
<?php
// connecterOraclebase de données
$conn = oci_connect('username', 'password', 'database');

// Interrogez les données qui doivent être mises à jour et verrouillées
$query = "SELECT * FROM my_table WHERE id = :id FOR UPDATE";
$stmt = oci_parse($conn, $query);
$id = 1;
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);

// Mettre à jour les données
$query = "UPDATE my_table SET field = :field WHERE id = :id";
$stmt = oci_parse($conn, $query);
$field = 'new value';
oci_bind_by_name($stmt, ':field', $field);
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);

// 提交事务并关闭connecter
oci_commit($conn);
oci_close($conn);
?>

Dans le code ci-dessus, d'abord, les lignes de données qui doivent être mises à jour sont verrouillées via l'instruction SELECT ... pour la mise à jour , puis l'opération de mise à jour est effectuée, et enfin la transaction est soumise à l'aide de OCI_COMMIT () et la connexion de la base de données est fermée via OCI_CLOSE () .

Contrôle de concurrence optimiste

Contrairement au contrôle de concurrence pessimiste, le contrôle de concurrence optimiste ne se verrouille pas avant l'opération, mais vérifie si les données ont été modifiées par d'autres utilisateurs lorsque les données sont modifiées. Dans Oracle, un contrôle optimiste de concurrence peut être réalisé via les versions entre la déclaration.

Voici un exemple de code utilisant un contrôle de concurrence optimiste en PHP:

 
<?php
// connecterOraclebase de données
$conn = oci_connect('username', 'password', 'database');

// Remettre en question les données et obtenir des informations de version
$query = "SELECT * FROM my_table WHERE id = :id";
$stmt = oci_parse($conn, $query);
$id = 1;
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);
$row = oci_fetch_array($stmt, OCI_ASSOC);
$oldVersion = $row['VERSION'];

// Mettre à jour les données
$newVersion = $oldVersion + 1;
$query = "UPDATE my_table SET field = :field, version = :newVersion WHERE id = :id AND version = :oldVersion";
$stmt = oci_parse($conn, $query);
$field = 'new value';
oci_bind_by_name($stmt, ':field', $field);
oci_bind_by_name($stmt, ':newVersion', $newVersion);
oci_bind_by_name($stmt, ':id', $id);
oci_bind_by_name($stmt, ':oldVersion', $oldVersion);
oci_execute($stmt);

// Vérifiez le nombre de lignes mises à jour
if (oci_num_rows($stmt) == 0) {
    // La mise à jour a échoué,Les données ont été modifiées
    oci_rollback($conn);
} else {
    // Mettre à jour avec succès
    oci_commit($conn);
}

// 关闭connecter
oci_close($conn);
?>

Dans cet exemple de code, interrogez d'abord les données et obtenez les anciennes informations de version. Ensuite, lors de l'exécution d'une mise à jour, vérifiez si les données ont changé en utilisant le numéro de version dans la clause WHERE . Si les numéros de version sont incohérents, cela signifie que les données ont été modifiées par d'autres utilisateurs, et que l'opération de mise à jour échouera et que Rollback sera effectué; Sinon, effectuez l'opération de soumission.

Résumer

Lorsque vous utilisez des bases de données Oracle dans PHP, la cohérence des données peut être assurée par le contrôle de concurrence pessimiste et le contrôle de concurrence optimiste. Le contrôle de concurrence pessimiste évite les conflits simultanés en ajoutant des verrous, tandis que le contrôle de concurrence optimiste vérifie les versions de données lorsqu'elles sont mises à jour, adaptées aux scénarios avec moins de conflits. La sélection de la stratégie de contrôle de concurrence appropriée basée sur les besoins de l'entreprise est cruciale pour la stabilité de la base de données et l'efficacité de l'application.

Cet article présente comment implémenter le mécanisme de contrôle et de verrouillage de la concurrence de la base de données Oracle dans PHP, dans l'espoir d'être utile aux développeurs lors de la gestion de l'accès simultané.