MySQL面试题
2021/6/1 19:22:18
本文主要是介绍MySQL面试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一,三大范式
- 原子性
- 必须和主键相关联
- 不能和非主键关联
ACID事务特性
原子性:最小单元
一致性:事务开始之前和事务结束之后数据一致
隔离性:每个事务都是独立运行,互不影响
永久性:对事务的修改是永久保存的
二,常用数据库引擎
MyIsam:不支持事务,默认引擎(mysql5.1以前)
innoDB:支持事务,之后默认引擎是innodb
三,事务隔离级别
读未提交:(会导致脏读,幻读和不可重复读)
读已提交
可重复读
可串行化读
四,悲观锁和乐观锁
悲观锁:每次去拿数据的时候都人为别人不会修改,但是在提交和更新的时候会判断有没有修改
乐观锁:每次都认为别人会修改,所以每次拿数据的时候都会上锁
查找数据库使用的是什么版本
MySql左联查内联查和外联查
左联查:展示左边的表,右边显示满足条件的
内联查:查询满足条件
右联查:展示右边的表,左边是满足条件的
五,MySql索引是如何实现
- B-树索引
- B+树索引(默认,可以达到二分法的性能,减少分裂和移动的频繁)
- Hash索引
- 唯一索引
六,sql优化
- 避免使用select * ,而是使用要查的字段
- 加where条件
- 选择正确的存储引擎
- order by要和where条件否则order by不会进行索引排序
- 尽量避免使用In或者not in会导致引擎走全表扫描
- 使用连接查询代替子查询
七,行锁和表锁
行锁:开销小,不会造成死锁,加锁快,锁定颗粒度大,发生锁冲突的概率最高,并发度最低
表锁:开销大,会造成死锁,加锁慢,锁力度小,发生锁冲突的概率最低,并发度最高
死锁的满足条件
同一时刻只能有一个事务持有这把锁
其他的锁需要在这个锁释放之后才能获取锁,而不能强行剥夺
当多个事务形成等待环路的时候,即产生死锁
八,存储过程
优点:
存储过程可封装,并隐藏复杂的商业逻辑
存储过程可以回传值,并可以接受参数
存储过程无法使用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面试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南
- 2024-10-22MySQL数据库入门教程:从安装到基本操作
- 2024-10-22MySQL读写分离入门教程:轻松实现数据库性能提升