事务
事务就是一次数据库操作中若干单元的管理,事务管理的目标是完整性,一次中的若干操作要么都成功,要么都失败
事务设置
默认情况下,mysql使用自动提交模式(变量autocommit为ON),这意味着,只要操作dml语句mysql会隐形自动提交
由于变量autocommit分为会话系统变量和全局系统变量,所以查询的时候,注意分辨是全局系统变量还是会话系统变量
会话系统变量和全局系统变量的区别在于全局变量的修改会影响整个服务器,而会话变量修改只会影响当前会话(数据库连接)
事务管理的特征(ACID)
1.原子性(atomic)
2.一致性(consistency)
3.隔离性(isolation)
4.持久性(durability)
问:事物的真正顺序?
答:原子性——隔离性——持久性——一致性
原子性
就是要保持一次操作中的所有语句要么都成功要么都失败
隔离性
控制多个事务在并发读写时,保证互不影响,隔离级别共有四种(读 未提交,读 已提交,可重复读,串行化)
问:为什么要划分隔离级别?
答:
读 未提交:一个事物可以读到另一个食物还未提交的数据
问题:可能会出现脏读,读到一条信息后,另一个事务还未commit,可能会回滚,这样读到的数据就叫脏读
读 已提交:一个事物只能读到另一个食物已提交的数据,虽然解决了脏读的问题,但是新问题是不可重复读
问题:事务开始的时候读到一个数据例如10,在此期间另一个事务将数据修改为20,也提交了,此时事务再次查询结果发生了变化,没有读到上次的数据,这种情况叫不可重复读
可重复读:一个事务开始时读到了一个数据,在事务中继续执行,再次读时,读到的与第一次保持一致,解决了不可重复读的问题
持久性
就是将数据持久化到硬盘上,不可回滚
一致性
就是保证数据操作的完整性