MySql支持多引擎,但是并非所有引擎都支持事务。比如MySql的原生引擎的MyISAM是不支持事务的,而我们最近常使用的InnoDB引擎是支持事务的。这也是这两种引擎的重要区别之一 。
原⼦性、⼀致性、隔离性、持久性
脏读、不可重复读、幻读
读未提交、读已提交、可重复读、串⾏化
针对不同隔离级别,数据库⾥⾯会创建⼀个视图,访问的时候以视图的逻辑结果为准。在“可重复读”隔离级别下,这个视图是在事务启 动时创建的,整个事务存在期间都⽤这个视图。在“读提交”隔离级别下,这个视图是在每个SQL语句开始执⾏的时候创建的。 这⾥需要注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;⽽“串⾏化”隔离级别下直接⽤加锁的⽅式来避免并⾏访问。
每条记录在更新的时候都会同时记录⼀条回滚操作。同⼀条记录在系统中可以存在多个版本,这就是数据库的多版本并发控制(MVCC) 。
系统会判断当没有事务需要⽤到这些回滚⽇志的时候,回滚⽇志会被删除。即当系统⾥没有线程使用⽐这个回滚⽇志更早的read-view的时候。