数据库面试题总结

1、索引、视图、存储过程、事务

2、数据库引擎

3、数据库优化

4、数据库迁移、灾备

一、索引

索引类型:普通索引、唯一索引、聚合索引、非聚合索引

1、原理:

2、优缺点:

唯一索引保证表中数据唯一、加快查询速度、加强表之间的联系

额外占用物理空间、会根据数据库表的CURD而变动

3、使用场景

经常需要搜索的列

数据改变量小的表(比如用户表)

经常使用的where语句条件的列

定义为text、image、bit的列不应该使用索引

二、事务

ACID 原子性、一致性、隔离性、持久性

MySQL隔离级别是 可重复读

Oracle隔离级别是 读已提交

四种隔离级别:

  • 读未提交、
  • 读已提交、
  • 可重复读 可读取前一个事务修改的数据
  • 串行化 一个一个排队读取数据,A事务操作完才执行B事务

三、表锁、行锁

  • 页级:引擎 BDB。
  • 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行
  • 行级:引擎 INNODB , 单独的一行记录加锁

存储引擎MyISAM是表级锁

  1. 锁的作用:解决并发访问的一致性
  2. 表级锁 只有持有表级锁的线程才可以进行更新,其他的读、写操作都会等待,直到锁释放
  3. 页面锁
  4. 并发锁:解决同时插入、更新等操作,MyISAM可以设置并发锁
  5. 怎么添加表级锁:MyISAM存储引擎 在执行查询、更新等操作会自动添加表级锁

存储引擎InnoDB是行级锁

与MyISAM区别:支持事务、采用行级锁

InnoDB实现行锁方式

只有通过索引查询数据的时候,才会使用行锁,否则使用表锁

InnoDB什么时候用表锁

1、事务需要更新大部分或者全部数据,如果使用默认行锁,更新效率较低,而且可能死锁、锁等待时间长

2、事务涉及多个表,使用行锁,很可能产生死锁,造成大量事务回滚

死锁

预防死锁:添加锁的等待时间

死锁后解决方法:kill掉线程

参考链接:

https://www.cnblogs.com/chenqionghe/p/4845693.html

https://www.jb51.net/article/50047.htm

参考链接

http://www.w3school.com.cn/sql/index.asp

https://www.cnblogs.com/wenxiaofei/p/9853682.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值