面试题首页 > MySQL面试题

MySQL常见面试题

001Innodb是如何实现事务的?

在MySQL中,事务是在存储引擎层实现的。对于InnoDB而言:
● 原子性代表着可回滚,这一特性主要有undo log实现;
● 隔离性需要在效率上作出平衡,在不同的隔离级别下主要由MVCC和锁实现;
● 持久性主要由redo log和double write实现,redo log是一种Write Ahead Log(WAL)策略,用于对数据页进行重做;double write则用于防止脏页刷盘时部分写失效导致的数据丢失。
MVCC(Multiversion concurrency control,多版本并发控制协议),是一种提高系统并发的技术,在很多情况下避免了加锁操作。MVCC通过undo log来构建数据的历史版本,通过视图来定义数据版本的可见性。并由此构建数据库在某一个时间点的全库快照(一致性视图),来实现一致性非锁定读,保障事务的隔离性和一致性。

002Myql中的事务回滚机制概述 ?

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。
要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。

003如何查看MySQL存储引擎?

show table status from `forum`; --forum是指定数据库名

004MySQL支持的存储引擎?

show engines;

Transaction:是否支持事务
XA:是否通过XA协议实现分布式事务(分为本地资源管理器,事务管理器)。
Savepoint:是否用来实现子事务(嵌套事务)。创建了一个Savepoints之后,事务就可以回滚到这个点,不会影响到创建Savepoints之前的操作。

005MyISAM和InnoDB的区别?

MyISAM(3 个文件)特点:只读之类的数据分析的项目
1. 支持表级别的锁(插入和更新会锁表)。不支持事务
2. 拥有较高的插入(insert)和查询(select)速度
3. MyISAM 用一个变量保存了整个表的行数,执行select count(*) from table语句时只需要读出该变量即可,速度很快;
InnoDB(2 个文件)特点:经常更新的表,存在并发读写或者有事务处理的业务系统。
1. 支持事务,支持外键,因此数据的完整性、一致性更高
2. 支持行级别的锁和表级别的锁
3. 支持读写并发,写不阻塞读(MVCC)
4. 特殊的索引存放方式,可以减少IO,提升查询效率
MyISAM 和InnoDB 是我们用得最多的两个存储引擎,在 MySQL 5.5 版本之前,默认的存储引擎是MyISAM。5.5版本之后默认的存储引擎改成了InnoDB,为什么要改呢?最主要的原因还是InnoDB 支持事务,支持外键,支持行级别的锁,对于业务一致性要求高的场景来说更适合。

006如何选择存储引擎?

InnoDB:适用对数据一致性要求比较高,需要事务支持
MyISAM:适用数据查询多更新少,对查询性能要求比较高。
Memory:适用一个用于查询的临时表。

目录

返回顶部