Mysql入门简单介绍MySQL中的事务机制
《Mysql入门简单介绍MySQL中的事务机制》要点: 从一个问题开始MYSQL教程 最近银行这个事情闹的比拟厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这就是“社会主义”.咱还是少发牢骚,多种树,莫谈国事.MYSQL教程 说到银行存钱,就不得不说一下从银行取钱这件事情,从ATM机取钱这件简单的事情,实际上主要分为以下几个步调:MYSQL教程
一个简单的取钱,主要分为以上几步.不知道大家有没有“天真”的想过,如果在第5步中,后台数据库中已经把钱减掉了,但是ATM还就是没有吐出钱(虽然实际也发生过,但是毕竟是低概率事件),这该怎么办?MYSQL教程 关于这个问题,银行系统的开发人员早就想过了,那么他们是怎么来搞定这个问题的呢?这就要说到本日总结的事务这个概念了. 对于上面的取钱这个事情,如果有一步出现了错误,那么就取消整个取钱的动作;简单来说,便是取钱这7步,要么都完成,要么就啥也不做.在数据库中,事务也是这个道理.MYSQL教程 事务由一条或者多条sql语句组成,在事务中的操作,这些sql语句要么都执行,要么都不执行,这便是事务的目的.MYSQL教程 对于事务而言,它必要满足ACID特性,下面就简要的说说事务的ACID特性.MYSQL教程 ??? A,表示原子性;原子性指整个数据库事务是不可分割的工作单位.只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功.事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必需撤销,数据库状态应该退回到执行事务前的状态; 总结了一些事务的基本概念,在MySQL中,事务还是分为很多中的,下面就来看看到底有哪些事务. 你能想象到吗?就这么个破事务还会分以下这么多种:MYSQL教程
现在就来对这些事务从概念的层面上进行简单的总结一下.MYSQL教程 ??? 扁平事务 BEGIN WORK Operation 1 Operation 2 Operation 3 ... Operation N COMMIT WORK ??? 或者是这种:MYSQL教程 BEGIN WORK Operation 1 Operation 2 Operation 3 ... Operation N (Error Occured) ROLLBACK WORK ??? 扁平事务的主要缺点是不能提交或回滚事务的某一部分,或者分几个独立的步骤去提交.好比有这样的一个例子,我从呼和浩特去深圳,为了便宜,我可能这么干:MYSQL教程 BEGIN WORK Operation1:呼和浩特---火车--->北京 Operation2:北京---飞机--->深圳 ROLLBACK WORK ??? 但是,如果Operation1,从呼和浩特到北京的火车晚点了,错过了航班,怎么办?感觉扁平事务的特性,那我就需要回滚,我再回到呼和浩特,那么这样成本是不是也太高了啊,所以就有了下面的第二种事务――带有保留点的扁平事务. BEGIN WORK SubTransaction1: BEGIN WORK SubOperationX COMMIT WORK SubTransaction2: BEGIN WORK SubOperationY COMMIT WORK ... SubTransactionN: BEGIN WORK SubOperationN COMMIT WORK COMMIT WORK ??? 这便是嵌套事务,在事务中再嵌套事务,位于根节点的事务称为顶层事务.事务的前驱称为父事务,其它事务称为子事务.事务的前驱称为父事务,事务的下一层称为子事务.MYSQL教程 ??? 子事务既可以提交也可以回滚,但是它的提交操作并不马上生效,除非由其父事务提交.因此就可以确定,任何子事务都在顶层事务提交后才真正的被提交了.同理,任意一个事务的回滚都会引起它的所有子事务一同回滚. MySQL中使用事务MYSQL教程 理论总结的再好,终归都要通过实践来进行理解.下面就来说说MySQL中是如何使用事务的.MYSQL教程 在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作.因此要显示地开启一个事务须使用命令BEGIN或START TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交.MYSQL教程 来看看我们可以使用哪些事务控制语句.MYSQL教程
这些不用你“管”MYSQL教程 有的时候有些SQL语句会产生一个隐式的提交操作,即执行完成这些语句后,会有一个隐式的COMMIT操作.有以下SQL语句,不消你去“管”:MYSQL教程
以上的这些SQL操作都是隐式的提交操作,不必要手动显式提交. 上面也说到了SET TRANSACTION用来设置事务的隔离级别.那事务的隔离级别是什么东东?MYSQL教程 ??? 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别.MYSQL教程 InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE.这些隔离级别之间的区别如下:
隔离级别越低,事务哀求的锁越少或保持锁的时间就越短.InnoDB存储引擎默认的支持隔离级别是REPEATABLE READ;在这种默认的事务隔离级别下已经能完全保证事务的隔离性要求,即达到SQL标准的SERIALIZABLE级别隔离.MYSQL教程 我们可以可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别.它的语法如下:MYSQL教程 SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} 注意:默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别.如果使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别.你必要SUPER权限来做这个.使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别. 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别.MYSQL教程 mysql> set session transaction isolation level repeatable read; Query OK,0 rows affected (0.00 sec) mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set (0.00 sec) 总结MYSQL教程 这篇文章,基本上都是理论概念的堆积,实战的东西基本没有.然则,这些都不是问题,这也无法阻挡这篇文章成为一篇读者喜欢的文章,是吧.好了,这篇关于MySQL中事务的文章就到此结束,以后如果有新的东西,就接着总结. 《Mysql入门简单介绍MySQL中的事务机制》是否对您有启发,欢迎查看更多与《Mysql入门简单介绍MySQL中的事务机制》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |