今天我们继续盘点那些高频的MySQL面试题。
说说InnoDB与MyISAM的区别
- InnoDB 支持事务,MyISAM 不支持,对于InnoDB 每一条SQL 语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL 语言放在begin 和commit 之间,组成一个事务;
- InnoDB 支持外键,而MyISAM 不支持。对一个包含外键的InnoDB 表转为MYISAM 会失败;
- InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM 是非聚集索引,数据文件是分
离的, 索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 - InnoDB 不保存表的具体行数,执行
select count(*) from table
时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
-
Innodb 不支持全文索引,而MyISAM 支持全文索引,查询效率上MyISAM 要高;
-
在MySQL 5.1 及之前的版本中,MyISAM 是默认的存储引擎,而在MySQL 5.5 版本以后,默认使用InnoDB 存储引擎。
-
InnoDB 支持行锁,而MyISAM 不支持行级锁,换句话说,MyISAM 会对整张表加锁,而不是针对行。
8 MyISAM 可被压缩,存储空间较小,而且MyISAM 在筛选大量数据时非常快。相比之下InnoDB 需要更多存储空间,会在内存中建立其专用的缓冲池用于高速缓冲数据和索引。
数据库的事务
首先要搞清楚什么是事务? 多条sql 语句,要么全部成功,要么全部失败。
事务的特性:
数据库事务特性: 原子性(Atomic) 、一致性(Consistency) 、隔离性(Isolation) 、持久性(Durability)。简称ACID。
- 原子性:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功, 整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返
回初始状态。 - 一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。如A 转账100 元给B,不管操作是否成功,A 和B 的账户总额是不变的。
- 隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰
- 持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中
往期文章
金三银四面试题(十六):MySQL面试都问什么(1)
金三银四面试题(十五):Java基础问题(6)
金三银四面试题(十四):Java基础问题(5)
金三银四面试题(十三):Java基础问题(4)
金三银四面试题(十二):Java基础问题(3)
金三银四面试题(十一):Java基础问题(2)
金三银四面试题(十):Java基础问题(1)
金三银四面试题(九):JVM常见面试题(3)
金三银四面试题(八):JVM常见面试题(2)
金三银四面试题(七):JVM常见面试题(1)
金三银四面试题(六):对象大小知多少
金三银四面试题(五):JVM之TLAB
金三银四面试题(四):Full GC 和 Minor GC
金三银四面试题(三):JVM内存模型
金三银四面试题(二):数据库缓存的数据一致性
金三银四面试题(一):JVM类加载与垃圾回收