1、什么是事务
为啥需要事务呢,是应为在实际的应用当中我们需要一系列的操作要么都成功,要么都失败。比较常用的一个例子是转账,A账户给B账户转100块钱,首先A账户扣除100块,然后B账户添加100块。这两个操作如果一个成功一个失败那就乐子大了,A账户扣款不成功 B账户+100成功了,平白多了100块、或者A账户扣款成功了B账户没添加成功,少了100 帐不平了啊。
因此必须要有个方案来保证这扣钱和价钱这两个操作是原子的,也就是要么两个一起成功,要么两个一起失败。这个解决方案就是事务了。
2、事务的基本性质
上面的描述比较好理解事务是干啥的但是不够全面和研究,人们总结了事务需要达到的几个目标,就是几个基本性质
1、原子性(Atomicity):原子在化学中,是最小单位,不可以再分割了.事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行。(commit/rollback)
原子性就是我们上面说的同时成功或者失败了
2 、一致性(Consistency):包装数据的完整性.事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏)事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
一致性说的是无论用户整么瞎搞,操作到一半还在执行的时候数据库给重启了 断电了啥的 数据库当中的各类数据要是一致的。不能说玩着玩着数据就乱了数据库给崩掉了。
3、隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
隔离性是说 多个人同时操作同一份数据的时候如何处理
4、持久性(Durability):
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响,该修改即使出现系统故障也将一直保持。
持久性是说我保存了的数据你给我返回成功了 那么他就要是一直在的 在不出现不可抗因素(硬件故障啥的)的时候数据不能给我丢了。