MySQL悲观锁
来源:互联网 发布:爱奇艺网络电影排行榜 编辑:程序博客网 时间:2024/06/10 04:26
MySQL悲观锁
一、概述
定义:
- 对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,在数据处理过程中,将数据处于锁定状态
- 本系统当前的其他事务,解释:每次数据连接 connection 会产生一次会话 session , 会话 session 中可产生多个事务 transaction ,而一个事务 transaction 只能在一个会话 session 中;即 session 与 transaction 的关系
实现:
- 基于MySQL提供的锁机制,保证数据访问的排他性
前提:
- 1、数据库存储引擎ENGINE需支持事务:
- 1.1、MyISAM存储引擎不支持事务,不可以在MyISAM存储引擎上实现事务相关的操作,即使设置了也无效;
- 1.2、InnoDB存储引擎支持事务;
- 2、关闭数据库的自动提交,即修改autocommit的值;autocommit 默认为1;MySQL默认运行在 autocommit 模式上,即每执行完毕一个更新操作,立即将结果存储到磁盘上;
- 2.1、autocommit = 1 ,默认,允许自动提交,即每一个操作都是一个独立的事务,都会独立的提交;
- 2.2、autocommit = 0 ,需要手动 commit 或 rollback 才会生效;可以将多个语句放在一个事务中,若失败,统一回滚操作;
- 即设置 autocommit = 0,可以开启事务,手动提交 commit / rollback
问题
- 为什么要支持事务?因为一个事务是一个连续的一组数据库操作,它是一个单一的工作单元进行;事务是访问并更新数据库中各种数据项的一个程序执行单元;举例:A转账给B,A账户扣款,B账户增款,是一个连续的数据库操作
- 为什么要关闭自动提交,即设置 autocommit = 0 ?因为MySQL默认使用autocommit模式,默认是允许自动提交,即当执行一个更新操作后,MySQL会立刻将结果进行提交;而悲观锁需要将被修改的数据锁定,如果是一组操作,要等到这一组操作都完成后再整体提交,如果失败则整体回滚到初始状态,而不是每一步操作提交一次;举例:A转款B,A扣款成功,但B收款失败,所以A扣款操作应 rollback 回滚,而不是 A扣款这一个子操作步骤成功
应用
- C/S结构
二、悲观锁使用
对于单个事务,设置 autocommit = 0 后,对数据更新操作后,需要手动 commit
对于连续的数据操作时
更新操作前设置 autocommit = 0
开启事务 begin / begin work / start transaction
数据操作
手动提交 commit / rollback
更新设置 autocommit = 1 ,保证不同事务间修改可见
参考资料
- mysql悲观锁总结和实践
- MySQL 事务与锁定命令 BEGIN/COMMIT/ROLLBACK 句法 缺省的,MySQL 运行
阅读全文
0 0
- mysql锁-悲观锁
- mysql悲观锁
- mysql悲观锁总结
- mysql 悲观锁
- mysql悲观锁
- mysql悲观锁
- MYSQL悲观锁
- MySQL悲观锁
- Mysql 乐观锁 悲观锁
- 【MySQL】悲观锁&乐观锁
- mysql 乐观锁 悲观锁
- 【MySQL】悲观锁&乐观锁
- mysql 悲观锁 乐观锁
- MySQL InnoDB 悲观锁机制
- mysql 悲观锁 的运用
- MySQL☞悲观锁详解
- mysql 数据库的悲观锁 乐观锁
- mysql 悲观锁与乐观锁
- HDU 2503.a/b + c/d
- 《计算机程序的构造和解释(第2版)》【PDF】下载
- Python Flask 学习笔记
- C#使用APlayer开发自制媒体播放器
- MVC和三层架构
- MySQL悲观锁
- 链栈的操作
- Vue2.0 使用vue-resource 模拟网络请求加载本地数据
- oracle 获取中文中的数字、字符串中的数字
- Python:linecache库
- 《计算机程序的构造和解释(第2版)》【PDF】下载
- C++构造函数 explicit关键字不起作用的一次小坑记录
- 求三角形面积
- 深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑