Maison >développement back-end >tutoriel php >Comment utiliser le contrôle de concurrence et le mécanisme de verrouillage de la base de données Oracle en PHP

Comment utiliser le contrôle de concurrence et le mécanisme de verrouillage de la base de données Oracle en PHP

WBOY
WBOYoriginal
2023-07-12 14:45:071342parcourir

Comment utiliser le contrôle de concurrence et le mécanisme de verrouillage de la base de données Oracle en PHP

Lors du développement d'applications Web, le contrôle de concurrence et le mécanisme de verrouillage de la base de données sont très importants. Dans le cas d'une concurrence élevée, si l'accès simultané aux données n'est pas géré de manière raisonnable, cela entraînera des problèmes de cohérence et d'intégrité des données. Cet article explique comment utiliser le contrôle de concurrence et le mécanisme de verrouillage de la base de données Oracle en PHP, ainsi que quelques exemples de code.

  1. Contrôle de concurrence pessimiste
    Le contrôle de concurrence pessimiste signifie que les données seront maintenues verrouillées avant que les opérations ne soient effectuées pour empêcher d'autres utilisateurs de modifier les mêmes données en même temps. Dans Oracle, vous pouvez utiliser l'instruction FOR UPDATE pour obtenir un contrôle de concurrence pessimiste.

Ce qui suit est un exemple de code utilisant le contrôle de concurrence pessimiste en PHP :

<?php
// 连接Oracle数据库
$conn = oci_connect('username', 'password', 'database');

// 查询需要更新的数据并锁定
$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);

// 更新数据
$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);

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

Dans le code ci-dessus, utilisez d'abord l'instruction SELECT ... FOR UPDATE pour verrouiller les lignes de données qui doivent être mises à jour, puis effectuez la mise à jour. opération. Enfin, utilisez oci_commit() pour valider la transaction et oci_close() pour fermer la connexion à la base de données.

  1. Contrôle de concurrence optimiste
    Le contrôle de concurrence optimiste signifie que les données ne seront pas verrouillées avant de fonctionner, mais vérifieront si les données ont changé lorsque les données sont modifiées et mises à jour. Dans Oracle, vous pouvez utiliser l'instruction VERSIONS BETWEEN pour obtenir un contrôle de concurrence optimiste.

Ce qui suit est un exemple de code utilisant le contrôle de concurrence optimiste en PHP :

<?php
// 连接Oracle数据库
$conn = oci_connect('username', 'password', 'database');

// 查询数据并获取版本信息
$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'];

// 更新数据
$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);

// 检查更新行数
if (oci_num_rows($stmt) == 0) {
    // 更新失败,数据已被修改
    oci_rollback($conn);
} else {
    // 更新成功
    oci_commit($conn);
}

// 关闭连接
oci_close($conn);
?>

Dans le code ci-dessus, interrogez d'abord les données et obtenez les informations de l'ancienne version, puis lors de la mise à jour des données, utilisez la clause WHERE pour déterminer simultanément si la version et l'ancienne version sont cohérentes. Si le nombre de lignes mises à jour est 0, cela signifie que les données ont été modifiées par d'autres utilisateurs et doivent être restaurées.

Résumé
L'utilisation du contrôle de concurrence et du mécanisme de verrouillage de la base de données Oracle en PHP peut être obtenue grâce à un contrôle de concurrence pessimiste et à un contrôle de concurrence optimiste. Le contrôle de concurrence pessimiste se verrouille avant les opérations pour garantir la cohérence des données. Le contrôle de concurrence optimiste ne se verrouille pas et garantit la cohérence des données en vérifiant la version des données lors de la mise à jour. En fonction des besoins spécifiques et de la logique métier, il est très important de choisir une stratégie de contrôle de concurrence appropriée.

Ce qui précède est une introduction et des exemples de code sur la façon d'utiliser le mécanisme de contrôle de concurrence et de verrouillage de la base de données Oracle en PHP. J'espère que cela aide!

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn