MySql教程

MySQL面试题

本文主要是介绍MySQL面试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一,三大范式

  1. 原子性
  2. 必须和主键相关联
  3. 不能和非主键关联

ACID事务特性
原子性:最小单元
一致性:事务开始之前和事务结束之后数据一致
隔离性:每个事务都是独立运行,互不影响
永久性:对事务的修改是永久保存的

二,常用数据库引擎
MyIsam:不支持事务,默认引擎(mysql5.1以前)
innoDB:支持事务,之后默认引擎是innodb

三,事务隔离级别
读未提交:(会导致脏读,幻读和不可重复读)
读已提交
可重复读
可串行化读

四,悲观锁和乐观锁
悲观锁:每次去拿数据的时候都人为别人不会修改,但是在提交和更新的时候会判断有没有修改
乐观锁:每次都认为别人会修改,所以每次拿数据的时候都会上锁
查找数据库使用的是什么版本
MySql左联查内联查和外联查
左联查:展示左边的表,右边显示满足条件的
内联查:查询满足条件
右联查:展示右边的表,左边是满足条件的

五,MySql索引是如何实现

  1. B-树索引
  2. B+树索引(默认,可以达到二分法的性能,减少分裂和移动的频繁)
  3. Hash索引
  4. 唯一索引

六,sql优化

  1. 避免使用select * ,而是使用要查的字段
  2. 加where条件
  3. 选择正确的存储引擎
  4. order by要和where条件否则order by不会进行索引排序
  5. 尽量避免使用In或者not in会导致引擎走全表扫描
  6. 使用连接查询代替子查询

七,行锁和表锁
行锁:开销小,不会造成死锁,加锁快,锁定颗粒度大,发生锁冲突的概率最高,并发度最低
表锁:开销大,会造成死锁,加锁慢,锁力度小,发生锁冲突的概率最低,并发度最高

死锁的满足条件
同一时刻只能有一个事务持有这把锁
其他的锁需要在这个锁释放之后才能获取锁,而不能强行剥夺
当多个事务形成等待环路的时候,即产生死锁

八,存储过程
优点
存储过程可封装,并隐藏复杂的商业逻辑
存储过程可以回传值,并可以接受参数
存储过程无法使用select指令来允许
存储过程可以用在数据检验,强制实行商业逻辑等
程序与数据库一次交互
缺点
存储过程往往特定在数据库上,受数据库限制
存储过程的性能受数据库限制

– 创建存储过程
create procedure 存储过程名()
begin
存储过程语句;
end

-- 调用存储过程
	call 存储过程名称();

久,视图
视图中保存的仅仅是一条select语句
视图中的源数据都来自于数据库表
数据库表称为基本表或者基表,视图则视为虚表

创建视图
create view 视图名
as
select 语句

程序里面调用视图
select * from V_testT141;
删除视图
drop view 视图名

修改视图
alter view 视图名
as
select 语句

查询视图
select * from 视图名

十,索引
优点:提高查询效率
缺点
添加索引需要创建索引页,占用空间
添加,修改,删除会改变索引页中的内容,降低增删改的效率

MySQL索引分为
普通索引:即一个索引只包含单个列,一个表可以有多个单列索引
唯一索引:索引列的值必须唯一,但允许为空
复合索引:即一个索引包含多个列

聚集索引(物理顺序):数据在索引页中的顺序和在数据表中的顺序一致,每个表最多只能有一个聚集索引
非聚集索引(逻辑顺序):数据在索引页中的顺序和在数据表中的顺序不一致,每个表可以有多个非聚集索引
注意:不是为表创建索引而是为表中的某列创建索引
创建索引:create index 索引名 on 表名(列名)
删除索引
drop index 索引名 on 表名

查看创建的索引
show index from 表名

这篇关于MySQL面试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!