mysql知识面试day1
1.介绍mysql
MYSQL是一个关系型数据库
2.事务的四大特性
acid
- A原子性表示要么全部成功要么全部失败
- C一致性事务执行前和执行后需要保持一致的状态
- I隔离性一个事务只能读到已提交的更改
- D持久性事务一旦被提交更改就是永久性的
3.数据库的三大范式
第一范式inf:确保字段的原子性
第二范式inf:必须要有主键,其他必须完全依赖于主键

第三范式:不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
4.事务隔离级别有哪些
- 脏读:指的是一个事务处理过程中读取到了令一个没提交的事务数据。b事务的数据可能没提交,导致了这个数据可能会被回滚。
- 不可重复读:多次读的返回中获取了不同的数据
- 幻读:在进行数据范围2次查询时,期间范围内添加入了新的数据
假设事务要新增一条记录,主键为id,在新增之前执行了select,没有发现id为xxx的记录,但插入时出现主键冲突,这就属于幻读,读取不到记录却发现主键冲突是因为记录实际上已经被其他的事务插入了,但当前事务不可见
隔离级别:
- Serializable:串行化通过强制的事务排序,使之不能相互冲突。解决了幻读。
- Repeatable read:(可重复读):Mysql的默认事务隔离级别,确保了同一个事务实列并发读取时候得到的是相同数据
- Read committed(读已提交)一个事务只能看见已经提交的事务
- Read uncommitted(读未提交):所有事务都可以看到其他未执行的结果
如何更改隔离级别
select @@transaction_isolation;
设置隔离级别:
set session transaction isolation level read uncommitted;
5.生产环境数据库一般用什么隔离级别
生产环境大多使用rc
- rr级别下存在间隙锁
-- rr级别下条件列没命中锁表,rc下锁行
所以rc的并发性高于RR
6.编码和字符集的关系
- Ascil:128表示英文和数字
- GB2312:中文
为了统一:使用了Unicode编码格式,使用了2-4字节表示字符。
ascll用一字节,unicode用2字节
在mysql可以通过show charset查看字符集
7.#utf8和utf8mb4的区别
- utf8mb4编码,mb4就是most bytes 4的意思,从上图最右边的Maxlen可以看到,它最大支持用4个字节来表示字符,它几乎可以用来表示目前已知的所有的字符
- utf8mb4编码,mb4就是most bytes 4的意思,从上图最右边的Maxlen可以看到,它最大支持用4个字节来表示字符,它几乎可以用来表示目前已知的所有的字符
- utf8 就像是阉割版的utf8mb4,只支持部分字符。比如emoji表情,它就不支持。
- collation,它是指字符集的比较规则,比如,"debug"和"Debug"是同一个单词,但它们大小写不同,该不该判为同一个单词呢。这时候就需要用到collation了。
使用:通过SHOW COLLATION WHERE Charset = 'utf8mb4';可以查看到utf8mb4下支持什么比较规则
之间的区别主要体现在空间上。
8.索引
8.1什么是索引
提高数据库表访问的一种数据结构,其占据着物理空间。(不是储存在内存中,而是储存在磁盘中)
- 优点:加快数据查找速度,加快表和表之间的连接。
- 缺点:建立索引需要占用物理空间。会降低曾删改的效率
8.2索引的作用

8.3何时使用索引
- 经常用于查询的字段
- 经常用于连接的字段
- 经常用于排序的字段
8.4什么时候不建立索引
- where中用不到的字段
- 表记录较少
- 经常需要增删改的
- 参与列运算,区分度不高
8.5索引的数据结构
索引的默认未B+树,可以有B+树和哈希表
- B+树,左节点大小小于当前节点,右节点大小大于。
- hash索引,根据hash码进行查找,其时间复杂度未O(1)
2者的区别
哈希索引不支持排序,不支持范围查找,模糊查找。
哈希白哦可能存在hash冲突
8.6 B和B+树的区别
- 数据存储方式:b+树只有叶子节点储存了实际的数据记录,非叶子节点只包含了键信息和指向子节点的指针。
- 范围查询效率:叶子节点之间用链表连接,所以范围查询的效率比较高,而在b、树种要遍历多个层级的节点,效率偏低。
- 数据检索方式,因为b树的非叶子节点保存。所以查询的路径更短。
8.7为什么B+树比b树更适合索引 - 因为数据储存在叶子节点中,叶子节点均为索引。且相互连接,只需要扫叶子节点就可以获取扫库。
- 节点只储存key值,这样以页未单位的索引可以存放更多的节点,减少更多的io支出
- B+树的查询效率更稳定。任何关键字的查询都类似从头到尾,所以每一个数据的查询效率像是
8.8索引有什么分类
- 主键索引
- 唯一索引 UNIQUE KEY 值是唯一,但允许有控制。而主键不可以未空。用于表示数据的记录保证不允许重复插入。
ADD CONSTRAINT constraint_name UNIQUE KEY(column_1,column_2,...);
- 组合索引:在表中的多个字段组合上建立索引。在多个字段组合创建的索引,在查询时需要满足最左前缀原则。
- 全文索引:只有在char,varchar,text这种才可以加全文索引
- 普通索引:最基本的索引,没有任何限制,值可以为空
9.最左匹配原则
前提基本组合索引。



10.聚集索引
索引树上储存的是主键,可以一次直接查找到数据,不要进行回表查询。
11.什么是覆盖索引
索引树上储存的是主键,可以一次直接查找到数据,不要进行回表查询。避免了二级索引。使用explain输出的extra列显示using index则表示是聚集索引。
12.索引设计的原则
- 经常用于作为条件的字段
- 区分度高的字段
- 避免给大字段进行索引,对于大字段的索引要使用短索引,对于较长的字符串使用短的前缀长度
- 索引的数目不应该追求多
- 频繁进行更改的字段不应该建立索引
- 满足最左前缀原则
13.索引失效的情况
- 在组合索引中,不满足最左前缀法则
- 模糊查询中以%开头的无法使用索引,但xxx%表示范围查询,能够使用索引
- 查询的列是字符串,没有加单引号的不行,可能回因为类型不同发生隐式转换,索引失效。
- 在所有中判断值进行计算
- 索引中使用or连接
14.什么是前缀索引
在很长的字符列上创建索引,回导致索引特别大且慢,所以将前几个字符作为索引,保证了较高的索引选择性。
ALTER TABLE table_name ADD KEY(column_name(prefix_length));
15.常见的索引引擎

-


互相之间的区别
MyISAM和InnoDB的区别?



浙公网安备 33010602011771号