mysql中事务想必大家都接触过,尽管你没有接触过事务,那起码你也应该听说过事务的一些概念。今天,我先不讲那些文邹邹的概念什么的,我直接给大家讲解一下它的一些常用运用。
按照书上或者是一些网上的教材来说,事务只支持innodb引擎的。不过,在我看了书之后,按我的理解,事务其实也存在于MyISAM,只是来说它的意义有些不太一样。
先来说说我们工作中常用的innodb引擎吧。我们都知道,在mysql5.7以后,它的默认引擎就是innodb,可能这也就是为了吏好的兼容事务而设计的吧(这也是我猜想的)。innodb事务是由锁构成。而它这个锁,通常有两种,一种是共享锁,另一种是排他锁。

共享锁,也叫是共享读锁,也就是多个事务之间,只能读取,不能做修改。

set autocommit = 0; ----让事务不自动提交(默认是自动提交的)
select * from table1 where id = 5 lock in share mode;
commit; ----提交

如果说第一个事务先获得了这个锁,那么,其他事务也只能获取共享读锁(不能是排他锁,不然,其他锁将会出现等待而卡住)

排他锁,也叫写锁。也就是多个事务之间,只能有一把锁是能读能写的状态,如果其他锁强进行来,那将会是等等而卡住。只有当前的事务提交后,后面的事务才能执行。

set autocommit = 0;
select * from table1 where id = 5 for update;
commit ;

当然,这儿有个需要注意的地方,那就是这两个共享锁和排他锁其实是行级锁,也就是只能是锁行的,并不能锁表。当然,这也是需要基于主键或者是索引。这儿我就先不展开来讲了。简单来说,如果事务的表没有主键或者是索引,那它就会成为“表”锁。

前面我也说了,从某种方面来说,MyISAM引擎也有索的概念。是的,只是来说MyISAM引擎它是表级锁。所谓表级锁,也就是说如果某个事务加了锁之后,另一个事务就会等待。

lock tables myTableName read #读锁,在这种情况下,所有的事务都只有读的权限,如果执行写入,则会报错。
#在这个阶段,当前事务能对当前表执行读的操作,而其他事务执行查询时,读到的是旧的数据。
unlock tables #执行提交后,其他事务才能执行写的操作。
lock tables myTableName write #写锁,在这种呢况下,基他事务不能读,也不能写。需要等到当前事务提交后,基他事务才能执行读和写。
#在这个阶段,当前事务能对当前事务执行读和写的操作,而其他事务如果强行进入(不管是读锁还是写锁),则会等待而卡住。
unlock tables #事务提交后,其他事务才能继续。

mysql 事务的实用小实例相关推荐

  1. spring+mybatis之声明式事务管理初识(小实例)

    前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...

  2. tp3.1 mysql 事务_tp框架事务处理实例和理解

    tp的事务开启是非常简单的, 只需要M()->startTrans();//开启事务,M()可以是M('xxx') $m->rollback();//事务回滚 $m->commit( ...

  3. 【VBS】超级实用小实例:仅用数字编号打开任意指定文件夹(超超超级全面指南)

    [VBS]实用链接指南 Hello World! 序 1.目的 2.需求分析 3.举例 4.思路 一.上手编程语言初步 (一)Visual Basic快速入门 (二)简洁的代码编辑器推荐 1. Sub ...

  4. php mysql 数据回滚,PHP mysql事务回滚操作实例_PHP教程

    public function insertUser ($userArray){ foreach ($userArray as $key => $value) { @$field .= &quo ...

  5. mysql 事务实例_mysql实现事务的提交和回滚实例

    mysql创建存储过程的官方语法为: 复制代码 代码如下:START TRANSACTION | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] R ...

  6. java读写mysql数据库_Java读写MySQL数据库小实例

     Java读写MySQL数据库小实例 首先需要安装和配置好MySQL数据库.接下来,先创建一个数据库,Java代码连接此数据库,然后读写. 假设基于MySQL命令行创建一个叫做:phildatab ...

  7. 总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

  8. mysql建表测试_总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

  9. phpstudy mysql建表_MySQL_总结MySQL建表、查询优化的一些实用小技巧,MySQL建表阶段是非常重要的一 - phpStudy...

    总结MySQL建表.查询优化的一些实用小技巧 MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些 ...

最新文章

  1. pandas dataframe与series
  2. python3 pycharm 远程调试 启动报错 ValueError: source code string cannot contain null bytes
  3. 最强的浏览器插件——油猴脚本
  4. python爬取知乎标题_python爬知乎热榜
  5. boost::graph_as_tree用法的测试程序
  6. 普及几个小常识,新手技能补充
  7. a5d27 emmc启动 修改2
  8. LeetCode 1472. 设计浏览器历史记录(双栈)
  9. linx vim 文件操作 ubuntu server 软件源
  10. vuex获取php数据,Nuxt中如何使用Vuex-Store异步获取数据
  11. 实现微信聊天机器人-初级篇
  12. 三角形内切圆和外接圆半径及其面积计算
  13. 线性回归预时间序列预测
  14. WEB前端关于SPA、MPA的区别
  15. vant2-上拉加载、下拉刷新
  16. 基于混合策略的麻雀搜索算法
  17. 时隔一个月,讯飞星火大模型 V1.5 发布:星火 APP 登场,综合能力三大升级!
  18. TRMM降水数据下载和处理
  19. IMU特性参数、误差模型及卡尔曼滤波参数设置
  20. 基于 Spring Boot 2.x 使用 Activiti 创建一个简易的请假流程

热门文章

  1. Verilog IIC AT24C128和LM75
  2. 机器学习岗位面试问题汇总 之 深度学习
  3. 破解Excel工作表加密和 VBA宏加密
  4. linux 网卡 mac 配置文件,Linux下更改网卡的MAC物理地址
  5. 凌吾修复代挂网全新界面源码
  6. 【一本通】1218:取石子游戏(博弈论)
  7. 北京密云区携手锐捷打造新一代教育城域网 为互联网+教育“开山铺路”
  8. 未标注目标语料是否均适合用于跨语言学习?『基于对抗判别器高效利用未标注语料的跨语言NER算法AdvPicker』
  9. Oracle如何将表的某一列的所有值合并成一行
  10. PopCap 播放声音