mysql设置乐观锁_mysql数据库怎么设置乐观锁
乐观锁与悲观锁不同的是,它是一种逻辑上的锁,而不需要数据库提供锁机制来支持当数据很重要,
回滚或重试一次需要很大的开销时,需要保证操作的ACID性质,
此时应该采用悲观锁而当数据对即时的一致性要求不高,重试一次不太影响整体性能时,
可以采用乐观锁来保证最终一致性,同时有利于提高并发性通常,
乐观锁采用版本号/时间戳的形式实现:给数据额外增加一个版本号字段进行控制;
更新时,若提交的数据所带的版本号与当前记录的版本号一致,则允许变更执行并更新版本号;
若不一致,则意味着产生冲突,根据业务需求直接丢弃并返回失败,或者尝试合并在MySQL的实践中,
常见的一种使用乐观锁的方法,是在需要使用乐观锁的表中,
新增一个version字段例如:create table product_amount (id int not null primary key
auto_increment,product_name varchar(64) not null,selling_amount int not null,
storing_amount int not null,version int not null);
当需要更新销售中的商品数量(selling_amount)时,
使用如下的SQL语句:update product_amount set selling_amount = #{selling_amount},
version = #{new_version} where id=#{id} and version = #{old_version};
若该语句返回1,则表示更新成功;若返回0,则表示前后的version不一致,产生冲突,
更新失败对于更新仓库中的商品数据(storing_amount)时,也是同理不过,
这样为每行记录都统一设置一个version字段的乐观锁方式,
存在一个问题:上例中,如果同时需要单独对selling_amount及storing_amount进行update
(两条SQL语句分别单独执行),那么后执行的一条会因为先执行的一条更新了version字段而失败,
而这种失败显然是没有必要的,白白浪费了开销一种比较好的方式是为每个需要乐观锁的字段
单独设置版本号,例如对上例的改造:
create table product_amount (id int not null primary key auto_increment,
product_name varchar(64) not null,selling_amount int not null,
selling_version int not null,storing_amount int not null,
storing_version int not null);
selling_amount和storing_amount分别拥有自己的乐观锁版本号
(selling_version和storing_version),更新时分别只关注自己的版本号,
这样就不会因为版本号被其它字段修改而失败,提高了并发性
mysql设置乐观锁_mysql数据库怎么设置乐观锁相关推荐
- MySQL延时更改数据_mysql数据库备份设置延时备份方法(mysql主从配置)
一 为什么需要延时备份 percona-xtrabackup是一个优秀的用于增量备份的工具.今天我们讲到的延时备份也是使用他们的产品. 以前在MySQL AB复制一文中提到了AB复制.我们首先回顾下M ...
- mysql sql 字段唯一_MySQL数据库唯一性设置(unique index)
我们知道在数据库设计中设置成主键的字段是不会重复的.唯一的,但如果有其他字段也需要保持唯一性应该如何设置呢?比如一个保存学生信息的表里要保证每条记录的学号都不同.这时候就需要对该字段设置唯一性. 设置 ...
- 数据库助手连接MySQL设置_数据库简易设置助手下载_数据库简易设置助手官方版下载_3DM单机...
<数据库简易设置助手>是一款数据库配置工具,能够高效便捷对数据库进行管理工作,他支持一件关闭开启数据库,并能够设置服务启动类型,支持一键设置jdk环境,支持系统中安装多个版本的JDk环境, ...
- mysql数据库的远程访问_mysql数据库远程访问设置方法
mysql数据库远程访问设置方法 myeclipse连接mysql数据库错误示例: null, message from server: "Host '127.0.0.1' is not a ...
- mysql 事务 不同库_MYSQL数据库重点:事务与锁机制
一.事务 一组连续的数据库操作,每一次操作都成功,整个事务就成功,只要有一步出错,整个事务就失败: MySQL事务与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB: ...
- mysql 子查询 共享锁_MySQL数据库排他锁与共享锁
导语:"简单印象"头条号每天将不定时发布一篇文章,文章内容大多为原创性技术相关或技术人的另一面生活,欢迎大家收藏文章或点击右上角的"关注",支持我的头条号,也可 ...
- mysql 全局select授权_MySQL的用户设置与授权
你可以有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表 .比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些 . 使用SHOW GRANTS语句显示用 ...
- mysql查看当前字符集_Mysql 查看字符集设置
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- mysql 备份的权限_MySQL的权限设置和备份还原
MySQL数据库系统的维护工作主要包括用户权限的设置.数据库的备份与恢复,本篇博客将对进行这些操作进行讲解 数据库的用户授权 MySQL数据库的root用户账号拥有对所有库.表的全部权限,频繁使用ro ...
最新文章
- FSWD_1_BasicHtmlCss
- python中四种进制的输出_Python基础语法和进制
- 简单选择排序 c代码
- Java split(“\\s+“) 和 split(“+“) 有什么区别
- [architecture]-AMBA AXI AHB APB学习总结
- android byte转16进制字符串,如何将字节数组转换为十六进制字符串,反之亦然?...
- 《陶哲轩实分析》部分勘误
- iOS13 已越狱 iOS12.4 已越狱
- JS 原生实现复选框全选反选功能
- 【收集】C#一些基础的面试题
- 在Python中处理大型文件的最快方法
- C++数据结构02--链式线性表(单链表的实现)
- 如何创建SQL Server日志传送
- 数据挖掘比赛笔记总结
- 五种主流的linux操作系统,五款常用的Linux操作系统
- 利用SPSS Modeler进行数据挖掘——探究不同程序语言的就业情况
- x64位xp连接位于32位xp系统上的打印机
- MATLAB运行cpp文件(从配置到运行)
- 【重磅】新智元推出百万级AI智库资讯互动平台,AI World2017世界人工智能大会TOP10大奖榜单发布
- 2020年正月初九 那个安检口的女子