位置: 编程技术 - 正文

简单介绍MySQL中的事务机制(mysql的概念及作用)

编辑:rootadmin

推荐整理分享简单介绍MySQL中的事务机制(mysql的概念及作用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简单介绍一下mysql,mysql相关技术介绍,mysql的认识,mysql的认识,简单介绍一下mysql,mysql的用处,简单介绍一下mysql,mysql的介绍,内容如对您有帮助,希望把文章链接给更多的朋友!

从一个问题开始

最近银行这个事情闹的比较厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这就是“社会主义”。咱还是少发牢骚,多种树,莫谈国事。

说到银行存钱,就不得不说一下从银行取钱这件事情,从ATM机取钱这件简单的事情,实际上主要分为以下几个步骤:

登陆ATM机,输入密码; 连接数据库,验证密码; 验证成功,获得用户信息,比如存款余额等; 用户输入需要取款的金额,按下确认键; 从后台数据库中减掉用户账户上的对应金额; ATM吐出钱; 用户把钱拿走。

一个简单的取钱,主要分为以上几步。不知道大家有没有“天真”的想过,如果在第5步中,后台数据库中已经把钱减掉了,但是ATM还就是没有吐出钱(虽然实际也发生过,但是毕竟是低概率事件),这该怎么办?

关于这个问题,银行系统的开发人员早就想过了,那么他们是怎么来搞定这个问题的呢?这就要说到今天总结的事务这个概念了。简单说说事务

对于上面的取钱这个事情,如果有一步出现了错误,那么就取消整个取钱的动作;简单来说,就是取钱这7步,要么都完成,要么就啥也不做。在数据库中,事务也是这个道理。

事务由一条或者多条sql语句组成,在事务中的操作,这些sql语句要么都执行,要么都不执行,这就是事务的目的。

对于事务而言,它需要满足ACID特性,下面就简要的说说事务的ACID特性。

A,表示原子性;原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销,数据库状态应该退回到执行事务前的状态; C,表示一致性;也就是说一致性指事务将数据库从一种状态转变为另一种一致的状态,在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏; I,表示隔离性;隔离性也叫做并发控制、可串行化或者锁。事务的隔离性要求每个读写事务的对象与其它事务的操作对象能相互分离,即该事务提交前对其它事务都不可见,这通常使用锁来实现; D,持久性,表示事务一旦提交了,其结果就是永久性的,也就是数据就已经写入到数据库了,如果发生了宕机等事故,数据库也能将数据恢复。

总结了一些事务的基本概念,在MySQL中,事务还是分为很多中的,下面就来看看到底有哪些事务。有哪些事务

你能想象到吗?就这么个破事务还会分以下这么多种:

扁平事务; 带有保存点的扁平事务; 链事务; 嵌套事务; 分布式事务。

现在就来对这些事务从概念的层面上进行简单的总结一下。

扁平事务 扁平事务是最简单的一种,也是实际开发中使用的最多的一种事务。在这种事务中,所有操作都处于同一层次,最常见的方式如下:

或者是这种:

扁平事务的主要缺点是不能提交或回滚事务的某一部分,或者分几个独立的步骤去提交。比如有这样的一个例子,我从呼和浩特去深圳,为了便宜,我可能这么干:

但是,如果Operation1,从呼和浩特到北京的火车晚点了,错过了航班,怎么办?感觉扁平事务的特性,那我就需要回滚,我再回到呼和浩特,那么这样成本是不是也太高了啊,所以就有了下面的第二种事务——带有保存点的扁平事务。 带有保存点的扁平事务 这种事务除了支持扁平事务支持的操作外,允许在事务执行过程中回滚到同一事务中较早的一个状态,这是因为可能某些事务在执行过程中出现的错误并不会对所有的操作都无效,放弃整个事务不合乎要求,开销也太大。保存点用来通知系统应该记住事务当前的状态,以便以后发生错误时,事务能回到该状态。 链事务 链事务,就是指回滚时,只能恢复到最近一个保存点;而带有保存点的扁平事务则可以回滚到任意正确的保存点。 嵌套事务 看下面这个,你就能明白了,啥是嵌套事务:

简单介绍MySQL中的事务机制(mysql的概念及作用)

这就是嵌套事务,在事务中再嵌套事务,位于根节点的事务称为顶层事务。事务的前驱称为父事务,其它事务称为子事务。事务的前驱称为父事务,事务的下一层称为子事务。

子事务既可以提交也可以回滚,但是它的提交操作并不马上生效,除非由其父事务提交。因此就可以确定,任何子事务都在顶层事务提交后才真正的被提交了。同理,任意一个事务的回滚都会引起它的所有子事务一同回滚。 分布式事务 分布式事务通常是指在一个分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点,比如:通过建设银行向招商银行转账,建设银行和招商银行肯定用的不是同一个数据库,同时二者的数据库也不在一个网络节点上,那么当用户跨行转账,就是通过分布式事务来保证数据的ACID的。

MySQL中使用事务

理论总结的再好,终归都要通过实践来进行理解。下面就来说说MySQL中是如何使用事务的。

在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作。因此要显示地开启一个事务须使用命令BEGIN或START TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

来看看我们可以使用哪些事务控制语句。

BEGIN或START TRANSACTION;显示地开启一个事务; COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的; ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改; SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT; RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常; ROLLBACK TO identifier;把事务回滚到标记点; SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

这些不用你“管”

有的时候有些SQL语句会产生一个隐式的提交操作,即执行完成这些语句后,会有一个隐式的COMMIT操作。有以下SQL语句,不用你去“管”:

DDL语句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等; 修改MYSQL架构的语句,CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD; 管理语句,ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等。

以上的这些SQL操作都是隐式的提交操作,不需要手动显式提交。事务的隔离级别

上面也说到了SET TRANSACTION用来设置事务的隔离级别。那事务的隔离级别是什么东东?

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。

InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。这些隔离级别之间的区别如下:

脏读:一个事务读取到了另外一个事务没有提交的数据; 比如:事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取到了T1更新后的行,然后T1执行回滚操作,取消了刚才所做的修改。现在T2所读取的行就无效了; 不可重复读:在同一事务中,两次读取同一数据,得到内容不同; 比如:事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那一行记录。然后T1又再次读取这行记录,发现与刚才读取的结果不同。这就称为“不可重复”读,因为T1原来读取的那行记录已经发生了变化; 幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同; 比如:事务T1读取一条指定的WHERE子句所返回的结果集。然后事务T2新插入 一行记录,这行记录恰好可以满足T1所使用的查询条件中的WHERE子句的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行。这个新行就称为“幻像”,因为对T1来说这一行就像突然出现的一样。

隔离级别越低,事务请求的锁越少或保持锁的时间就越短。InnoDB存储引擎默认的支持隔离级别是REPEATABLE READ;在这种默认的事务隔离级别下已经能完全保证事务的隔离性要求,即达到SQL标准的SERIALIZABLE级别隔离。

我们可以可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下:

注意:默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做这个。使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。

总结

这篇文章,基本上都是理论概念的堆积,实战的东西基本没有。但是,这些都不是问题,这也无法阻挡这篇文章成为一篇读者喜欢的文章,是吧。好了,这篇关于MySQL中事务的文章就到此结束,以后如果有新的东西,就接着总结。

几种MySQL中的联接查询操作方法总结 前言现在系统的各种业务是如此的复杂,数据都存在数据库中的各种表中,这个主键啊,那个外键啊,而表与表之间就依靠着这些主键和外键联系在一

初步介绍MySQL中的集合操作 啥是集合操作?通常来说,将联接操作看作是表之间的水平操作,因为该操作生成的虚拟表包含两个表中的列。而我这里总结的集合操作,一般将这些

简单讲解MySQL中的多源复制 近日ORACLE发布几个新的功能在最新的Mysql5.7.2的版本上,由此有了此篇文章。大多数的改善是在数据库性能和复制相关的功能上,这个新版本会带给我们

标签: mysql的概念及作用

本文链接地址:https://www.jiuchutong.com/biancheng/347292.html 转载请保留说明!

上一篇:在MySQL中使用LIMIT进行分页的方法(在mysql中使用视图的限制不包括)

下一篇:几种MySQL中的联接查询操作方法总结(mysql连接是什么协议)

  • 退回的企业所得税怎么做账务处理
  • 所得税费用属于什么科目借贷方向
  • 一般纳税人收到普票可以抵扣吗
  • 核定征收的小规模企业所得税B表收入总额含税吗
  • 个体工商户怎么注册
  • 外币账户收款如何做账务处理呢?
  • 事业单位取暖费什么时候发
  • 奖金属于应付职工薪酬
  • 挂靠人员帮外单位人员缴纳社保如何做账
  • 公司要撤资入股的钱可以退吗
  • 补记以前年度往来款
  • 企业租车费用怎么处理方法
  • 为什么收到的劳务费税点打星号?
  • 河道工程维护管理费征收
  • 水利建设专项收入税率
  • 纳税人必须熟知什么
  • 资产转让的优点
  • 500万以下固定资产最新政策
  • 发票密码区出来了还能用吗
  • 模板摊销率
  • 视同销售收入计入会计利润中吗
  • 出口转内销申报需要先做出口退税吗
  • 公允价值变动借方是增还是减
  • 奖金属于工资吗?要交税吗?
  • 苹果手机无法加入WiFi
  • iphone和电脑同步
  • 一种简单的快乐
  • PHP:xml_get_current_line_number()的用法_XML解析器函数
  • 没有发票只有收据可以报销吗
  • w11系统黑屏
  • 罚款是否需要开发票
  • 小规模纳税人销售货物税率是多少
  • 商贸企业销售
  • window10怎么禁用系统弹窗
  • PHP函数func_num_args用法实例分析
  • 手写发票可以报税吗
  • 疯狂世界百科
  • 企业所得税资产总额平均值怎么算
  • 洗浴报销票子怎么写
  • 三代手续费企业所得税
  • 公积金怎么推出工资
  • 一万元,两分的利息,一年利息是多少
  • 定额发票验旧日期怎么算
  • 劳务发票去哪里开
  • 物品数量怎么填写
  • 个税专项附加扣除标准调整
  • 汇款汇给别人了应该怎么办
  • 衍生工具什么意思
  • 职工薪酬纳税调整明细表税收金额
  • 红冲发票后如何申报增值税
  • 大家怎么看理想这个牌子
  • 传媒公司的骗局把戏
  • 超期未备案可以投诉么
  • 持有待售资产的条件
  • 存货跌价准备冲减成本
  • 什么是逐步结转分步法
  • 存储过程 decode
  • avgorange是什么文件夹
  • window10节电模式怎么关闭
  • ubuntu磁盘清理工具
  • ubuntu20桌面
  • linux系统中安装软件的批处理文件
  • win7系统桌面快捷键
  • 电脑出现win 7 界面 然后就不动了
  • window10隐私常规设置
  • ubuntu清空文件内容
  • win8.1系统电脑设置闪退
  • win10出现恢复界面0xc000000f
  • 微信小程序自动跳转怎么关闭
  • 使用JQuery实现Ctrl+Enter提交表单的方法
  • surface游戏模式
  • shell脚本实现ssh登录
  • TNet Tasharen Networking 学习总结
  • php与nodejs
  • 用jQuery的AJax实现异步访问、异步加载
  • gridview行数
  • python app爬虫教程
  • 安卓模拟器测试
  • 供热用地规划指标
  • 车船税单独交行吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设