数据库面试题

DBS DBMS DB区别
- DBS 数据库系统
- DBMS 数据库管理系统
- DB 数据库
数据库系统dbs包括但不限于数据库管理系统dbms和数据库dbjava
MySQL存储引擎
- InnoDB(默认):支持事物,表锁,行锁设计,支持外键
- MyISAM:不支持事物和表锁设计,不支持外键
事物
- 使用场景
-
转帐:mysql
- a转帐给b,a帐户减小
- b帐户增长
- 过程就要用到事物,转帐事物就回滚
- 解释:一组原子性的SQL查询(结合ACID)
-
ACID特性面试
-
隔离级别(低到高)算法
- read uncommitted(未提交读)
- read committed(提交读):大多数数据库默认的级别
- repeatable read (可重复读):mysql默认级别,解决了脏读问题,InnoDB经过mvcc可解决幻读问题
- serializable(可串行化):最高的隔离级别,不能并发,解决了幻读问题,会产生超时 锁争用问题
乐观锁与悲观锁
-
悲观锁sql
- 特征(what):每次操做数据都会加锁
- 常见例子:mysql中行锁 表锁 读锁 写锁 ;java的中重量级锁synchronized
-
乐观锁数据库
- 特征(what):操做数据时不加锁
- 实现方法(how):经过版本控制和cas算法实现
- 优势:适用于多读的应用类型,能够提升吞吐量
- 常见例子:java中的原子变量类(cas算法)
MVCC多版本并发控制
-
是啥(what):服务器
- 能够认为是行级锁的变种,他在不少状况下避免加锁,花销更低
-
分类:数据结构
-
实现(mysal的innodb引擎):并发
- 经过在每行记录后面保存两个隐藏的列来实现,一个是保存行的建立时间,一个是保存行的过时时间。不过这里的时间指的是系统版本号
死锁(数据库的)
- 解释现象:两个或两个以上事务在同一资源相互占用,并请求锁定对方占用的资源,从而致使恶性循环的现象。
并发控制
- 解决问题:我在读数据,你在删数据的状况
-
锁分类:mvc
- 读锁:共享锁,不阻塞
- 写锁:排他锁,排除其余写锁和读锁。
锁策略
-
-
分类:
表锁:开销最小
行级锁:最大程度支持并发,但开销最大
范式分类
- 1nf:属性具备原子性
- 2nf:在1nf基础上消除非主属性对主码的部分依赖
- 3nf:在2nf基础上消除传递依赖
范式与反范式
-
范式:
-
优势:
更新比反范式快
修改数据少
表比较小,存在内存中,执行快
-
缺点:
须要关联
反范式:
-
Char varchar
- Char是定长 剩余空间会用空格填充
- Varchar是可变长
MySQL date、datetime和timestamp类型的区别
索引(书的目录)
- 解决问题(why):方便查找数据
-
优势:
- 大大减小服务器须要扫描的数据量
- 帮助服务器避免排序和临时表
- 将随机io变成顺序io
缺点:
-
-
建立索引的原则
- 最左前缀匹配原则,具体在联合索引体现,mysql会一直向右匹配,当遇到范围查询会中止,此时把范围查询的索引放到最后便可
- 常常做为查询的字段做为索引
- 更新频繁的字段不适合作索引
- 定义有外键的字段必定要作索引
- 尽可能扩展索引,不要从新新建索引
-
索引分类
-
按底层数据结构分:
b数索引(底层是b+数)
哈希索引
空间数据(r-tree)索引
全文索引
-
按逻辑分类
主键索引(特殊的惟一索引,不容许null值)
单列索引
多列索引
惟一索引
空间索引
Group by
- 后面接条件时用having;
- 通常与cout()函数一块儿使用,实现查询重复数据功能
- 查重:


分页查询(limit(mysql) top(sqlserver))
公众号
- 欢迎关注公众号 布尔bl ,分享Java相关信息技术、生活感悟。
