“这里是云端源想IT,帮你轻松学IT”
嗨~今天的你过得还好吗?
无论现在多么不开心
你要相信
明天会比今天更好
??
-.11.29-
在日常开发中我们经常会遇到需要同时处理多个操作的情况,比如在购物时,我们需要同时完成支付和更新库存两个操作。这时,如果其中一个操作失败了,我们就需要进行回滚,以保证数据的一致性。
那么,如何在MySQL中实现这样的功能呢?答案就是——事务。下面我们就来介绍一下MySQL事务是什么?它是如何使用的?
一、什么是事务?事务定义
事务是一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务是一个最小的工作单元)。
一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。
事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。
事务是什么?
往通俗的讲就是,事务就是一个整体,里面的内容要么都执行成功,要么都不成功。不可能存在部分执行成功而部分执行不成功的情况。
就是说如果单元中某条sql语句一旦执行失败或者产生错误,那么整个单元将会回滚(返回最初状态)。所有受到影响的数据将返回到事务开始之前的状态,但是如果单元中的所有sql语句都执行成功的话,那么该事务也就被顺利执行。
比如有一个订单业务:
1.订单表当中添加一条记录2.商品数量数据更新(减少)…
当多个任务同时进行操作的时候,这些任务只能同时成功,或者同时失败。
二、事务的特性事务有四个特性:一致性、持久性、原子性、隔离性。下面分别来解释一下这四个特性都有什么含义。
原子性
事务是一个不可分割的工作单位,要么同时成功,要么同时失败。例:当两个人发起转账业务时,如果A转账发起,而B因为一些原因不能成功接受,事务最终将不会提交,则A和B的请求最终不会成功。
持久性
一个事务一旦提交成功,它对数据库中数据的改变将是永久性的,接下来的其他操作或故障不应对其有任何影响。
隔离性
一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
一致性
事务执行接收之后,数据库完整性不被破坏。
注意:只有当前三条性质都满足了,才能保证事务的一致性。
刷脏:Mysql为了保证存储效率,于是每次将要读写的文件是先存储在缓存池中,对于数据的操作是在缓存池中,而mysql将会定期的刷新到磁盘中。
三、事务的使用事务是如何保证操作的完整性的呢?
其实事务执行中间出错了,只需要让事务中的这些操作恢复成之前的样子即可,这里涉及到的一个操作,回滚(rollback)。
事务处理是一种对必须整批执行的MySQL操作的管理机制,在事务过程中,除非整批操作全部正确执行,否则中间的任何一个操作出错,都会回滚(rollback)到最初的安全状态以确保不会对系统数据造成错误的改动。
相关语法:
--开启事务
starttransaction;
--若干条执行sql
--提交/回滚事务