1、MySQL有哪几种数据存储引擎?有什么区别?
MySQL中通过 show ENGINES
指令可以看到所有支持的数据库存储引擎。最为常用的就是 MyISAM
和 InnoDB
。
MyISAM
和 InnoDB
的区别
- 存储文件。
MyISAM
每个表有两个文件,数据文件(MYD
)和索引文件(MYISAM
)。而InnoDB
每个表只有一个文件idb
。 InnoDB
支持事务,支持行级锁,支持外键InnoDB
支持XA事务InnoDB
支持部分回滚SAVEPOINT
2、什么事脏读、幻读、补课重复读?要怎么处理?
这些问题都是MySQL进行事务并发控制时经常遇到的问题。
- 脏读:在事务进行过程中,读到了其他事务未提交的数据
- 不可重复读:在事务进行过程中,读到了其他事务未提交的数据
- 幻读:在一个事务过程中,用同样的操作查询数据,得到的记录数不相同
处理方式有很多种:加锁、事务隔离、MVCC
3、事务的基本特性和隔离级别有哪些?
事务:表示多个数据操作组成一个完整的事务单元,这个事务哪都所有数据操作要么同时成功,要么同时失败。
事务的特性:
- 原子性:事务时不可分割的,要么完全成功,要么完全失败。
- 一致性:事务无论是完成还是失败,都必须保持事务内操作的一致性。当失败时,都要对前面的操作进行回滚,不管中途是否成功
- 隔离性:多个事务操作一个数据时,为防止数据损坏,需要将每个事务进行隔离,互相不干扰。
- 持久性:事务开始就不会终止,它的结果不受其他外在因素的影响。
MySQL当中的五种隔离级别
NONE
:不使用事务READ UNCOMMITED
:允许脏读READ COMMITED
:防止脏读,最常用的隔离级别REPEATABLE READ
:防止脏读和不可重复读,mysql默认SERIALIZABLE
:事务串行,可以防止脏读,不可重复读,幻读
五种隔离级别,级别越高,事务的安全性更高,但并发性能越低。