目录
- 案例分析
- 更新账户金额
- 常见问题
- 如果数据中存在 update_time 字段受影响的行数是多少?
- 如果执行 update 更新但受影响的行数为 0 会加行锁吗?
- 参考资料
本文将通过一个 用户账户金额更新的案例 分析几种数据更新的操作的优劣。希望对大家有帮助 🐶。

数据库版本 : mysql 5.7.23
案例分析
创建数据库的DDL:
CREATE TABLE `hw_account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`balance` int(11) DEFAULT NULL,
`status` varchar(20) DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
更新账户金额
直接更新
方案 1 查询后更新
# 数据查询
select * from hw_account where id = 1;
# 数据更新
update hw_account set balance = 5 where id = 1;
存在的问题,就是分两次操作,如果并发执行的时候,可能造成更新丢失的问题.
乐观锁方案
利用版本号操作,即对数据库增加乐观锁的方式进行。
# 数据查询
select * from hw_account where id = 1;
# 数据更新
update hw_account set balance = 5 , version = version + 1
where id = 1 and version = n;
# 判断是否成功
if row < 1 {
回滚
}
存在的问题,如果该条数据并发操作的时候,会导致其他的请求失败。如果这个请求的前置链路比较长的话, 回滚成本比较高。
无锁方案
不用查询,采用数据库的计算,也不需要版本号的操作,直接通过域值进行有效性判断。具体的 SQL 如下:
# 数据更新
update hw_account set balance = balance + @change_num , version = version + 1
where id = 1 and version = n;
# 判断是否成功
if row < 1 {
回滚
}
这种方案修改比较简单, 但是依赖于数据计算,感觉不是特别友好。
排队操作
通过 redis 或者 zk 的分布式锁,进行数据请求进行排队。然后在进行数据更新。
# 伪代码
if (获取分布式锁) {
update hw_account set balance = @balance where id = 1;
} else {
# 进入等待,或者进行自旋获取锁
}
常见问题
如果数据中存在 update_time 字段受影响的行数是多少?
update_time 的字段定义如下,如果数据为id = 1, status = 1 如果执行更新数据的 sql 为
update hw_account set `status` = 1 where id = 1;
返回的受影响的行数为 0;
如果执行 update 更新但受影响的行数为 0 会加行锁吗?
会的, 执行更新的语句都会加行锁(前提,事务内)
参考资料
mysql.com
相关推荐:
OpenAIGPT:开启智能时代的语言革命,ai辣妹动漫
ChatGPT界面看不到用户:隐秘的互动方式与智慧的背后,AI和UR
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
ChatGPT页面无法下拉?禁用浏览器扩展,轻松解决!,imba 1.6 ai
怎么让AI润色文章,让写作更轻松?
AI工具汇总网站,让科技为您的工作加速
ChatGPT页面空白不乏登录:让你秒变职场高手与生活智囊,百度ai 腾讯ai
怎么用AI写文:让创作更轻松,效率翻倍
SEO技巧提升网站流量:打造高效网站的关键策略,Ai测脸相
SEO导流:如何通过精准优化实现网站流量大爆发,网站优化优化怎么做
SEO添加:提升网站流量与排名的必备策略,seo团队成员中国人
seo网络上什么意思,seo表示什么 ,如何避免今日头条ai写作检测
SEO希望:如何通过SEO优化实现网站突破,迈向成功之路,品牌网站推广软件
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
SEO站外优化策略:提升网站排名的关键因素,遵义公司网站推广
SEO应该如何提升网站流量与排名?揭秘成功的SEO策略,肺炎疫苗推广营销
乘风SEO:突破困境,领航网络营销新时代,武汉靠谱的关键词排名
360ai问答-智能时代的全能助手,未来的智慧生活,ai生成白底
SEO笔记:如何打造高效的SEO策略提升网站排名,网站优化优质服务方案
GPT-3.5可以免费使用吗?AI未来的无限可能,ai烧猪
为什么说seo重要,为什么说seo重要一点 ,中通智能ai是什么意思
SEO词的魔力:如何通过关键词优化打破流量瓶颈,免费网站建设高端
在线AI文章生成器开启智能创作新时代
如何用AI写公众号文章?让创作更高效、更轻松
什么是seo如何进行seo,何谓seo ,红米的AI摄影什么意思
SEO全站优化:打造强大网站排名的必备利器,AI论文写作的优点
用AI优化文章,轻松提升内容质量与创作效率
SEO汇报:如何通过数据分析提升网站排名,助力企业业绩增长,免费推广网站大全百度经验
文章疑似AI生成怎么办?如何辨别并应对AI生成文章的挑战
SEO要点:提升网站排名的核心技巧与策略,福田市网站建设推广费用
SEO优化要钱吗?揭秘SEO投资背后的价值与回报,ai领域
AI免费写文章:让创作变得轻松高效
SEO分类中内部优化的有:让你的网站脱颖而出!,by ai
360刷排名工具选哪家?揭秘2025年最强排名优化工具!,ai写作网站哪个好一点
seo站内链接有什么作用,seo中网站内链的作用 ,781900ai
“爱站”:开启网站优化与流量增长的新纪元,seo入门ppt
什么是seo网络推广,seo网络推广技术 ,ai写真官方
英语日记AI生成:轻松提升英语水平的智能助手
高效创作新时代AI文案速写工具,让创作更轻松
在线AI文章:为您打造全新内容创作体验
什么是seo模型,seo模块总结 ,ai技术授课
SEO超级,助力企业站点冲刺搜索引擎排名,白云全网营销推广哪家强
ChatGPT40不收费版本:科技革新,智能助手助力生活与工作,ai医疗武器有哪些
SEO联系:如何通过SEO优化提升您的网络营销效果,企业营销推广获客
什么是seo发外链,seo外链类型有哪些 ,小小苏ai
SEO优化排名:让您的网站在搜索引擎中脱颖而出,我ai 达瓦仓决
ZBlog:开启你的个人网站新时代,轻松搭建与管理,二手手机营销推广方案
SEO查看-如何通过精确分析提升网站流量与排名,东丽网站建设价格
ChatGPT-01:开创人工智能新纪元,AI如何画模糊的云层
SEO韩国:为您开启国际市场的增长之门,seo文章标题有哪些