1. Mysql的存储引擎有哪些其主要区别
有innodb和myisam
innodb支持行锁和事务以及表锁
myisam只支持表锁不支持行锁和事务
innodb是聚簇索引myisam是非聚簇索引
2.聚簇索引和非聚簇索引的区别
聚簇索引他索引和数据都在一个文件,非聚簇索引的索引和数据不在一个文件中
聚簇索引的叶子节点存储的是行数据,非聚簇索引的叶子节点存储的是行数据的索引
3.mysql中的索引有哪些
有B+树索引和Hash索引
b+树索引支持顺序索引和随机索引他的叶子节点存储的是索引和数据,并且叶子节点相互连接的。
hash索引是基于hash表来实现的,他会对索引列通过哈希算法得到hash值
4.hash索引和B+树索引的区别
1.hash索引一般是精准查找,b+树除了精准查找还有能有范围查找
2.hash索引可能发生hash冲突,不够稳定
3.hash索引不支持排序的
4.hash索引不支持范围查找
5.hash索引的种类有哪些
1.主键索引:他是不允许重复的,并且不能为null
2.唯一索引:不允许重复的和可以为null值
3.普通索引:可以有重复的值也可以有null值
4.组合索引:多个列组成 的索引
6.主键索引和普通索引的区别
主键索引的数据列的数据是唯一且不能为空,普通索引列数据允许不唯一并且可以为空
主键索引是聚簇索引不需要回表,普通索引是非聚簇索引需要回表
在每个表中只能有一个主键索引可以有多个普通索引
7.b树和b+树的区别
b树的叶子节点和非叶子节点都是有数据列的b+树只有叶子节点有数据列
b树只能支持随机检索,b+树支持顺序检索和随机检索
b树他的叶子都是相互独立的,b+树的 叶子节点相互连接的
8.MySQL索引为啥使用b+树索引不使用B树索引
因为b树索引只支持随机检索,B+树索引支持随机检索和顺序检索
B+树的空间利用率也是比较高的检索效率更快
9.避免索引失效的方式有哪些
1. 避免使用select *
2. 使用in也可能使索引失效
3.使用or也可能导致索引失效
4.索引列使用算术运算
5.索引列使用函数
6.order by也会导致索引失效
7.类型不匹配也会导致索引失效
8.不满足最左前缀也会使索引失效
9.在使用like %在前
10.数据库中的锁有哪些及其区别
按照锁的区间划分 分为:间隙锁和临键锁
区别:
间隙锁:他是间一个范围的数据进行锁定锁住的区间是双开的区间
临键锁:他是由行锁+间隙锁组成的他锁定的是当前行的前一行数据和后一个行数据
是一个左开右闭的区间
按照锁的粒度划分 分为:行锁和表锁
按照锁级别划分 分为:共享锁(读锁)和排他锁(写锁)
按照锁的使用方式分为:乐观锁和悲观锁
11.事务的四大特性
ACID
原子性:原子性就是要么全部成功要么全部失败
一致性:事务提交前后要保持一致
隔离性:每个事务都是相互独立的
持久性:每个事务提交后将永久保存
12.数据库中并发一致性问题
脏读:就是说可以读取未提交的数据
不可重复读:两次读取的数据不一致
幻读:在两次读取过程中发现在第二次读取时比第一次读取多出一些数据
13.事务的隔离机制
读已提交:只能读取已提交的数据解决了脏读问题
读未提交:可以读取未提交的数据可能会发生脏读
可重复读:一个事务在多次读取的结果保持一致
串行化:需要加锁实现,强制事务是以串行的方式执行
14.隔离机制如何实现的
读已提交和可重复读通过MVCC来实现的串行化可以通过锁来实现的
15.MVCC是啥
MVCC就是多版本并发控制机制,通过undoLog版本链和Read View来实现的用UndoLog来保存历史快照,Read View可见性规则来判断当前版本的数据是否可见
16.快照读和当前读的区别
快照读:就是读取数据可见的版本有可能读取到旧的版本比如说一些select 就是快照读
当前读:读取最新 的数据,比如说显示加锁就是当前读
17.SQL的执行顺序是
from >on>join>where>group by >having>select> >order by >limit
18..left join (左外连接)和右外连接(right join)和join(内连接)的区别
left join:是以左表为准也就是查询左表的 全部数据和右表符合条件的数据,最多能查询A*B条数据最少a条数据
right join:是以右表为准也就是查询右表的全部数据和左表符合条件的数据
join:就是查询左右表中符合条件的数据
19.undo log和redo log和bin log区别
undo log主要保证事务的原子性,用来回滚事务
redo log主要保证事务持久性
binlog:也就是二进制文件,记录者insert,update,delete等sql语句用于数据增量备份