-
事务隔离
-
事务的特性
-
ACID(Atomicity 原子性 consistency一致性 consistency隔离性 Durability持久性)
-
多个事务同时执行的时候可能会出现 , 脏读(dirty) , 不可重复读(repeatable) , 幻读(phantom)
-
SQL 事物的隔离级别
- 读未提交(read uncommitted)
- 一个事物还没有提交的时候 , 他做的变更就可以被其他的事物看到
- 读提交(read committed)
- 一个事物提交后 , 他做的变更才能被其他事物看到
- 可重复读(repeatable read)
- 一个事物执行过程中看到的数据总是跟事物启动时看到的数据是一致的 , 未提交的变更对其他事物也是不可见的
- 串行化(serializble)
- 对于同一行记录, 查询的时候会加读锁 ,写的时候会加写锁
- 读未提交(read uncommitted)
-
查询数据库的隔离级别
show variable '%isolation%'
-
事物的启动 begin / start transaction
-
设置
set commit=0
之后关闭了 mysql 的自动提交 , 所有 sql 语句都需要 commit后才可见 -
事务隔离的实现:每条记录在更新的时候都会同时记录一条回滚操作。同一条记录在系统中可以存在多个版本,这就是数据库的多版本并发控制(MVCC)。
-
回滚日志什么时候删除?系统会判断当没有事务需要用到这些回滚日志的时候,回滚日志会被删除。
-
什么时候不需要了?当系统里么有比这个回滚日志更早的read-view的时候。
-
为什么尽量不要使用长事务。长事务意味着系统里面会存在很老的事务视图,在这个事务提交之前,回滚记录都要保留,这会导致大量占用存储空间。除此之外,长事务还占用锁资源,可能会拖垮库。
-
-
网友评论