MySQL更新操作的方法有哪些
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,本篇内容介绍了"MySQL更新操作的方法有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!案例分析
千家信息网最后更新 2024年09月30日MySQL更新操作的方法有哪些案例分析
更新账户金额
直接更新
乐观锁方案
无锁方案
排队操作
常见问题
如果数据中存在 update_time 字段受影响的行数是多少?
如果执行 update 更新但受影响的行数为 0 会加行锁吗?
本篇内容介绍了"MySQL更新操作的方法有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
案例分析
创建数据库的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更新操作的方法有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数据
更新
方案
问题
查询
数据库
影响
方法
乐观
成功
内容
分布式
字段
数据查询
时候
更多
案例
版本
知识
加行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
饿了吗软件开发多少钱
部门文件管理公用盘服务器
广州erp软件开发外包
服务器带多宽合适
东东网络技术老师
数据库外键就是其他表的主键
gis与一般的数据库管理系统
软件开发属于高新收入吧
宁波学软件开发费用
森林的服务器怎么收藏
服务器怎么建立数据库
服务器连接主机显示器无信号
云数据库运行平台
网络安全与ssl
光猫链接isp服务器超时
软件开发保密协议免费下载
支付宝服务器安全问题
一个局域网至少需要有几个服务器
红树林监控服务器连接失败
网络安全管理制度的意义
爱站显示的服务器地址是真实的吗
软件开发收益有哪些
服务器错误 请稍后再试
日本mapple服务器
怎么新建qt链接数据库
修改服务器的时间
2021年中小学生网络安全教育
软件开发平台是指
服务器日志信息保存多久
express 服务器