事务知识点总结
- 事务的概念:一组数据库操作,要么全部成功,要么全部失败;
- 事务的特性:原子性、一致性、隔离性、持久性;
- 同一记录多个事务同时执行,可能会出现的问题:脏读、不可重复度、幻读;(为了解决这些问题,就出现了隔离级别的概念)
- 隔离级别:读未提交、读提交、可重复读、串行化;(执行效率依次降低,安全性依次增高)
- 读未提交:一个事务还未提交,他做的变更就能被另一个事务看到;
- 读提交:一个事物提交后,他做的变更才能被另一个事务看到;
- 可重复读:一个事务执行过程中看到的数据,总是和它启动时看到的数据保持一致。当然,该级别下,所做的变更在未提交前,其他事务也是不可见的;
- 串行化:对于同一记录,“读”会加读锁,“写”会加写锁。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
- 隔离级别的实现:数据库底层通过创建一个视图,访问的整个过程以视图逻辑结果为准;另外,每条记录在更新的时候,都会同时记录一条回滚操作;故同一条记录在系统中同时可能会存在多个版本,也就是多版本并发控制(MVCC)。
- 读未提交:直接返回记录上的最新值,没有视图的概念;
- 读提交:是在每条
sql
语句执行的时候,创建视图; - 可重复读:是在事务开启的时候,就创建视图;
- 串行化:是用加锁的形式来避免并行访问的;
- 事务隔离级别的配置参数:
transaction-isolation
; - 回滚日志什么时候清除?当系统中没有比这个回滚日志更早的 reda-view 的时候;
- 事务的启动方式:显示的启动;
begin transaction ; commit ; rollback
; set autocommit = 0 ;
或set autocommit = 1
建议总是使用
set autocommit = 1
,然后显示的启动事务
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: