InnoDB事务的隔离级别总结

1,事务的特性:原子性,隔离性,一致性,持久性

2,多事务同时执行的时候,可能会出现的问题:脏读,不可重复读,幻读

3,事务隔离级别:读未提交,读提交,可重复读,串行化

4,不同事务隔离级别的区别

  ·读未提交:一个事务还未提交,它所做的变更就可以被别的事务看到

  ·读提交:一个事务提交之后,它所做的变更才可以被别的事务看到

  ·可重复读:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的额数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。

  ·串行化:顾名思义是对于同一行记录,写 会加 写锁, 读 会加 读锁。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

5,配置方法: 启动参数 transaction_isolation 

6,事务隔离的实现:每条记录在更新的时候都会同时记录一条回滚操作。同一条记录在系统中可以存在多个版本,这就是数据库的多版本并发控制(MVCC)

7,回滚日志什么时候删除? 系统会判断当没有实物需要用到这些回滚日志的时候,回滚日志会被删除

8,什么时候不需要了?当系统里没有比这个回滚日志更早的read-view 的时候

9,为什么尽量不要用长事务: 长事务意味着系统里面会存在很老的事务视图,在这个事务提交之前,回滚记录都要保留,这会导致大量占用存储空间。除此之外,长事务还占用锁资源,可能会拖垮数据库。

10,事务启动方式: 一,显示启动事务语句,begin或者start transcation ,提交commit,回滚rollback;二:set autcommit = 0,该命令会把这个事务的自动提交关闭。这样只要执行一个select语句,事务就启动,并不会自动提交,知道主动执行commit或者rollback或者开端连接。

11,建议使用方法一,如果考虑多一次交互问题,可以使用commit work and chain 语法,在autocommit =1的情况下用begin显示启动事务,如果执行commit则提交事务。如果执行commit work and chain 则提交事务并自动启动下一个事务。

 

posted @ 2021-04-27 17:40  pebblecome  阅读(251)  评论(0)    收藏  举报