软件架构与思考

👉 所有文章
高性能 高性能设计模式
数据库 数据库分库分表指南 MySQL 建表参考 MySQL 初始化数据的一些方案 数据版本号
分布式 ID 分布式 ID 生成方案探讨
缓存 缓存 使用数据版本号保证缓存是最新数据 基于redis的二级缓存
微服务 如何实现远程调用 RPC 协议中的数据签名验签和加解密方案探讨 关于服务间调用循环依赖的一些思考 我所理解的负载均衡 一致性哈希 基于Redis的分布式会话管理系统 如何部署服务 灰度发布 如何区分上游和下游 日志级别
算法与协议 一个可扩展的 MQ 消息设计 Dynamo涉及的算法和协议 写时复制
任务分发 Gearman入门 如何使用redis构建异步任务处理程序
安全 关于对账的一些理解 一个简单可靠的 Dubbo 请求/响应数据签名方案
其他 使用卫语句减少 if else 嵌套

数据版本号


在乐观锁的一些文档中,会提到用版本号实现乐观锁。

例如在表中加一个 version 字段,类似下面的方式:

create database blog_db;

create table `user_info` (
    `id` bigint not null auto_increment,
    `name` varchar(45) not null default '',
    `version` bigint not null default 0 comment '数据版本号',
    primary key (`id`)
) engine = InnoDB default charset = utf8mb4;

如果要更新某条数据的 name 字段,乐观锁会这样做:

update user_info 
set 
    name = 'xxx',
    version = version + 1
where 
    id = 10
    and verison = 0
;

这里的版本号,就是一条数据的版本号,表明了数据的修改次数。

修改版本号的更简单方式,是 where 条件中不指定当前 version 值:

update user_info 
set 
    name = 'xxx',
    version = version + 1
where 
    id = 10
;

( 本文完 )

文章目录