Mysql面试

1、InnoDB索引与MyISAM索引实现的区别是什么?

Mysql中索引分三类:B+树索引Hash索引全文索引

MyISAM只有非聚簇索引,InnoDB有一个聚簇索引。InnoDB的数据文件本身就是索引文件,而MyISAM索引文件和数据文件是分离的 ,索引文件仅保存数据记录的地址

2、聚簇索引与非聚簇索引b+树实现有什么区别?

3、索引的优缺点

4、什么是唯一索引?

唯一索引创建:        create unique index un_no ON 表(字段)

普通索引创建:        create index 别名 ON 表(字段)

复合索引创建:        create index 别名 ON 表 (字段,字段) 

5、什么时候适合创建索引,什么时候不适合创建?

适合:   经常作为where查询条件,关联表字段,排序字段,分组(group by)字段,统计字段

不适合:上面的反条件,表数据很少

7、有哪些情况会导致索引失效?

1、索引值 进行计数或者使用函数

2、模糊匹配 like  以%开头

3、 索引值 使用不等于(!= ,<> )

4、IS NOT NULL 导致失效

5、索引值 类型转换 导致失效

6、复合索引,不符合最左原则

8、如何查看一个表的索引

查看表上面的索引:show index from 表  show index from 表

显示用到的索引:explain sql语句

9、group by 分组和order by在索引使用上有什么区别?

10、Mysql内部有哪些核心模块组成

11、一条sql发送给mysql后,内部是如何执行的?(说一下 MySQL 执行一条查询语句的内部执行过程?)

12、InnoDB 存储引擎和 MyISAM 存储引擎对比

InnoDB,是mysql默认引擎,支持事务行表锁外键,分布式事务,回滚

MyISAM,不支持事务,行锁

除非几乎没有写操作全部都是高频的读操作可以选择MyISAM作为表的存储引擎,

其他业务可以一律使用InnoDB

13、mysql事务,什么是ACID

A:原子性,要么都做,要么都不做

C:一致性,事务的结果提交后,状态是一致的

I:隔离性,一个事务不会影响别的事务

D:持久性,事务一旦提交,数据的改变是永久的

脏读:读到别人没有提交的数据

不可重复读:前一个读,该事务还没结束,别的修改了,导致后面读就不一样了

幻读:一个事务读取数据集,还没结束别的事务多其进行删除或者新增,导致后面读取数据集不一样了

14、不可重复读和幻读的区别

不可重复读 针对的是一份数据的修改

幻读 针对的是行数修改

15、什么是事务隔离级别

MySQL InnoDB存储引擎默认的事务隔离级别是可重复读(REPEATABLE-READ)。

事务隔离的实现主要是:读写锁和MVCC

MVCC的实现依赖于:隐藏字段(上一个事务的id,指针),read Viewundo log

16、Mysql会产生几种日志

错误日志        error log

慢查询日志        slow query log

一般查询日志        general log

重写日志        redo log

回滚日志        undo log

二进制日志        bin log

17、bin log 作用是什么?

MySQL的bin log日志是用来记录MySQL中增删改时的记录日志。

当你的一条sql操作对数据库中的内容进行了更新,就会增加一条bin log日志。查询操作不会记录到bin log中。

18、redo log 作用是什么

redo log是一种基于磁盘的数据结构,用来在MySQL宕机情况下将不完整的事务执行数据纠正,redo日志记录事务执行后的状态。

当事务开始后,redo log就开始产生,并且随着事务的执行不断写入redo log file中。redo log file中记录了xxx页做了xx修改的信息,我们都知道数据库的更新操作会在内存中先执行,最后刷入磁盘。

redo log就是为了恢复更新了内存但是由于宕机等原因没有刷入磁盘中的那部分数据。

19、undo log 作用是什么?

undo log主要用来回滚到某一个版本,是一种逻辑日志。

undo log记录的是修改之前的数据,比如:当delete一条记录时,undolog中会记录一条对应的insert记录,从而保证能恢复到数据修改之前。在执行事务回滚的时候,就可以通过undo log中的记录内容并以此进行回滚。

20、mysql常用函数

1、abs()        绝对值

2、avg()        平均值

3、greatest(,,,)        返回最大值

合并字符串        concat(s1,s2)

保留小数        format(x,n) 四舍五入

去除开头结尾的空格        trim(s)        ltrim(s)        rtrim(s)

当前日期        curdate()

当前时间        curtime()

IF(expr, v1, v2)如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2

时间转字符串         DATE_FORMAT(now, '%Y-%m-%d %H:%i:%s')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值