事务
事务是指逻辑上的一组操作或者一组SQL语句的集合,组成这组操作的各个单元,要么全部成功,要么全部失败
事务的四大特性(ACID):
1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部发生,要么全部不发生,不可能只执行其中的一部分操作,这就是事务的原子性。
2.一致性(consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态,比如无论a给b怎么转账或b转a,两个人最后的金额加起来==没转账前的总金额。
3.隔离性(isolation):事务的隔离性是多个用户并发访问数据库时,数据可为每个用户开启事务,多个并发事务之间相互隔离,一个事务所做的修改在最终提交以前,对其他事务是不可见的。
4.持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失,因为数据已经保存在硬盘中了。
事务隔离级别
并发事务处理会带来的问题
赃读:指一个事务读取了另一个事务未提交的数据。
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。一个事务读取到了另一个事务修改后的数据。(update)
幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 (insert)
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。
数据库通过设置事务的隔离级别防止以上情况的发生:
* 1、Read uncommitted:赃读、不可重复读、幻读
* 2、Read committed:不可重复读、幻读
* 4、Repeatable read:幻读(mysql默认)
* 8、Serializable:可序列化
级别越高,性能越低,数据越安全。