事物概念:一个或多个sql的组合
实例:银行转账:给同学转账1000,你的账户少了1000,对方的账户多了1000
原子性:一个事物要么都做,要么都不做
一致性:在事物前和事物后,数据完整性都要符合预设规则,依赖原子性
持久性:事物之后,数据的修改是永久的(持续化存储)
隔离性:允许多个事物并发执行,不会因为交叉执行导致数据不一致
begin;//首先开启事物 update accout set money=money-1000;//然后进行修改 然后因为某种异常情况,执行中断,维修之后,进行事物回滚(rollback),还原数据 (commit)提交事物,表示本次事物完全完毕,提交之后无法回滚, 事物在没有提交之前出现任何情况都可以回滚
脏写:事物A对数据的修改,在事物提交之前被其他事物覆盖。一般不会考虑,写都是加锁的。
脏读:一个事物中读取到的数据是其他事物中未提交的数据,可能会回滚
幻读:事务A查询“张三”,查询不到,插入又不成功,“张三”这条数据就像幻觉一样出现。这就是所谓的“幻读”。
不可重复读:在一个事物的不同阶段读取的数据不一致,事物A读取某一数据,事务B读取并修改了该数据,事物A为了对读取值进行检验而再次读取该数据,便得到了不同的结果。
读未提交:在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。虽然效率,但也基本不用
读已提交:一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。
可重复读:这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,本来它会产生幻读,但MySQL中采用MVCC技术解决了幻读。
可串行化:它是在每个读的数据行上加上共享锁,强制事务排序,使之不可能相互冲突。在这个级别,只能一个一个数据进行读取,效率极低,也基本不用。
MVCC:多版本并发控制
给每个事物分配一个事物id,指向自己的临时拷贝
事物中对数据进行操作时,都临时拷贝出一份数据进行操作,对拷贝出来的数据进行操作,事物提交时将事物操作持久化存储
解决了脏读,不可重复读,幻读的问题