mysql常见面试题

1.存储引擎种类
Innodb、MyIsam、Memory(heap)、BDB、ISAM、MERGE

2.InnoDb和MyIsam区别
innodb支持事务  myIsam不支持
innodb支持行级锁 myisam只支持表级锁
innodb是聚集索引 myisam是非聚集索引
innodb不支持全文索引
innodb支持外键 myisam不支持
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。

3.聚集索引与非聚集索引
聚簇索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
聚集索引中键值的逻辑顺序决定了表中相应行的物理顺序。
非聚集索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

MyISAM引擎使用B+Tree作为索引结构,是非聚集索引,叶节点的data域存放的是数据记录的地址。
在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复

InnoDB也使用B+Tree作为索引结构,是聚集索引,叶节点的data域存放的是数据记录,所以InnoDB的数据文件本身就是索引文件
InnoDB的辅助索引data域存储相应记录主键的值而不是地址。

4.约束
主键、默认值、唯一、外键、非空

5.性能分析explain
explain显示了MySQL如何使用索引来处理select语句以及连接表。
select_type:select类型 simple、primary、union、dependent union、 union result
type:连接类型 , 从最佳类型到最差类型 system 、const、eq_ref 、ref、ref_or_null、index_merge、unique_subquery 、index_subquery、range 、index、all
possible_keys :提示使用哪个索引会在该表中找到行
keys : MYSQL使用的索引
key_len :MYSQL使用的索引长度
ref :ref列显示使用哪个列或常数与key一起从表中选择行。
rows: 显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引

6.union
用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
如果允许重复的值,请使用 UNION ALL

7.alter table 操作对大数据表有什么问题? 如何解决?
mysql执行大部分修改表结构的方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表,一般而言,大部分alter table操作将导致mysql服务中断,如果数据量大会是很长时间。
有两个技巧可以避免:
.先在一台不提供服务的机器上执行alter table 操作,然后和提供服务的主库进行切换
.影子拷贝:用要求的表结构创建一张和源表无关的新表,然后通过重命名和删表的操作交换两张表,有第三方工具可以完成

8.事务的特性
acid
原子性:一系列操作要么全部完成 要么全部失败
一致性:数据操作完要保持一致性,比如外键约束还保持
隔离性:事务之间相互隔离 相互不影响
持久性:操作的结果 对数据库的影响是永久的

9.锁的种类
影响范围:表级锁 行级锁
共享锁 排他锁

10.连接池
程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
(1)  程序初始化时创建连接池
(2)使用时向连接池申请可用连接
(3)使用完毕,将连接返还给连接池
(4)程序退出时,断开所有连接,并释放资源

11.数据库范式
第一范式(1NF):每一列都是不可分割的原子数据项
第二范式(2NF):在1NF的基础上,要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性
第三范式(3NF):在1NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF,又称完美范式)

12.if表达式
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
例:select*,if(sva=1,"男","女")as ssva from taname;

13.执行sql文件
(1)mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】
示例:D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql 
(2)进入mysql的控制台后,使用source命令执行
source 【sql脚本文件的路径全名】

14.shell脚本操作数据库
可以用shell脚本操作MySQL数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作 。用法:mysql  -hhostname -Pport -uusername -ppassword  -e  相关mysql的sql语句

15.alter修改表
增加字段:alter table user add  `type` tinyint(4) NOT NULL COMMENT '用户类型'  after a;
修改字段:alter table user modify `type` tinyint(4) NOT NULL COMMENT '用户类型';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值