ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**乐观锁:** 乐观锁的基本思想是,当多个用户同时访问共享资源时,不会立即锁定资源,而是在提交更新之前检查是否有冲突。如果没有冲突,更新将继续进行;如果发现冲突,更新将被拒绝。 在乐观锁中,通常使用版本号或时间戳等字段来标识资源的版本。每次更新操作都会增加版本号或更新时间戳。如果在提交更新时发现版本号或时间戳不匹配,说明有冲突发生。 乐观锁的优点是它不会阻塞其他用户的访问,只有在冲突发生时才会拒绝更新操作。这可以提高并发性能。 以下是一个使用乐观锁的示例: ``` $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); // 获取记录 $id = 1; $stmt = $db->prepare("SELECT id, data, version FROM items WHERE id = :id"); $stmt->execute(array(':id' => $id)); $row = $stmt->fetch(PDO::FETCH_ASSOC); // 假设获取到的记录不为空 if ($row) { // 更新数据 $data = "new data"; $version = $row['version'] + 1; // 预期的新版本号 // 更新记录 $stmt = $db->prepare("UPDATE items SET data = :data, version = :version WHERE id = :id AND version = :current_version"); $stmt->execute(array( ':data' => $data, ':version' => $version, ':id' => $id, ':current_version' => $row['version'] )); // 检查更新是否成功 if ($stmt->rowCount() > 0) { echo "Record updated successfully"; } else { echo "Concurrent update, try again"; } } ```