事务发生背景:
银行转账过程中,如果发生了意外,需要使用事务进行处理。
A先生的账号有余额1000元
B先生的账号有余额200元
A给B转账500元
由于发生了某些故障,造成A账号在转账过程中出现了错误,这时就需要使用事务回滚(rollback)。如果A账号成功扣款,转账完成,B账号余额增加500元。
如果不使用事务处理的话:
1.当A账号进行转账扣款时,发生错误。B账号并没有收到转账金额500元。而A账号已经提示完成扣款.
2.当A账号进行转账发生错误,未成功扣款,而B账号提示收到转账金额500元。
我们称上述的情况产生的数据为脏数据
事务实现的具体步骤:
1.首先需要关闭MySQL自动提交功能。set autocommit = 0
2.开启事务: start transaction/begin
3.执行相应的SQL操作
4.提交或回滚
5.再将MySQL 自动提交功能开始 set autocommit = 1
概念:
在MySQL中事务主要用于处理操作量大,复杂度高的数据。只有定义了InnoDB引擎的数据库才支持事务。事务处理可以用来维护数据库的完整性,保证SQL操作要么全完成,要么全不执行.
事务满足四个特性:即ACID
A:原子性。一个事务中的所有操作,会作为一个整体来看待即,在执行时如果有一个操作没有成功,那么所有操作都将被回滚。回到事务开始前的状态。
C:一致性。在事务开始之前和事务结束之后,数据库的完整性没有被破坏,说明写入的资料符合数据库的所有设置的规则,包括数据的精度。
I:隔离性。数据库允许同时并发多个事务,并且同时对数据库进行读写操作,隔离性可以保证防止多个事务并发执行时由于交叉执行从而导致数据不一致。
事务的隔离分为:读未提交、读提交、可重复读、串行化。
D:持久性。事务处理结束后,对数据的修改是永久的,即存储在数据库中。