校招面试知识点总结-----------数据库

一、基本数据库概念

1、数据库的好处

1)可以持久化数据到本地
2)结构化查询

2、数据库的常见概念

1)DB:数据库,存储数据的容器
2)DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
3)SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流的数据库软件通用语言。

3、数据库存储数据的特点

1)数据存在表中,然后表再放在库中
2)一个库中可以有多个表,每张表具有唯一的表名来标识自己
3)表中有一个或多个列,列又称为“字段”,相当于java中的“属性”
4)表中每一行数据,相当于java中的“对象”

4、常见的数据库管理系统

MySQL ,oracle , db2 ,SqlServer

二、数据库查询基本语法和执行顺序

语法:

select 查询列表 7
from 表1 别名 1
连接类型 join 表2 2
on 连接条件 3
where 筛选 4
group by 分组列表 5
having 筛选 6
order by 排序列表 8
limit 起始条目索引,条目数 9

分析:首先我们得明白我们查询的目的,就是为了得到我们想要的数据,这些数据会通过一张虚拟的表来显示。上面的语法不是一次查询必须全部必备,使用哪些完全取决于我们想要得到的数据。
上面的执行顺序可以这样划分:
1、如果我们查询的数据在两张表上,首先连接两张表。
2、分组前筛选。
3、分组。
4、分组后筛选。
5、若需要排序,则排序。
6、控制显示的页数及每页显示的个数。

仔细想想上面的顺序是不可逆的,比如说上面的5、6调换顺序,那就是先排序后筛选,这样的话你对那些不需要的数据也进行了排序,这样是没有意义的。

三、事务

1、事务的四大特性(ACID)

原子性:一个事务的所有操作要么全部发生,要么全部不发生。
一致性:一个事务对于数据库的操作要保证数据库中的数据从一个一致性状态变为另一个一致性状态。
隔离性:对于并发的多个事务,事务之间的操作要相互隔离,相互不能影响。
持久性:一旦事务提交,事务对于数据库数据的改变就是永久性的。

2、事务的隔离级别

1)读未提交:
2)读已提交:
3)可重复读:
4)串行化:

四、索引

1、为什么使用索引?(用途)

可以提高数据库访问速度。

2、用索引有什么好处?

1)索引可以避免全表扫描。
2)对于非聚集索引,有些查询甚至可以不访问数据项。
3)聚集索引可以避免数据插入操作集中于表的最后一个数据页。(聚集插入时会按照索引顺序插入)

3、索引的缺点?

1)创建和维护索引要耗费时间
2)索引需要占用物理空间
3)对表中数据进行增删改查时,索引也要动态维护。

4、索引的分类:

1)普通索引
2)唯一索引
3)主键索引
4)联合索引
两个或多个列上的索引称为联合索引,创建联合索引时必须要考虑列的顺序,因为他是从左到右开始搜索的,在创建时应该将最常用的列放在最左边。

5、非聚集索引和聚集索引的区别:

1)非聚集索引叶子节点并非数据节点。
2)叶子节点为每个真正的数据行存储一个“键-指针” 对
3)叶子节点还存储了一个指针偏移量,根据页指针及指针偏移可以定位到具体的数据行
4)在除叶节点外的其他索引节点,存储的是类似的内容,只不过指针指向的是下一级的索引。

6、索引的数据结构(B-树和B+树)

结合这两幅图来讲:
B-树
B-树:
1)任意非叶子节点最多只有m个儿子。
1)每个非叶子节点都存放一个“键-指针对”,其中键是真正的数据,而指针指向的是下一级的节点。
2)非叶子节点的键的范围为 m/2-1<=K<=m-1。
2)如果非叶子节点的键为K,那么它的指针数P为K+1,儿子树=P。

B+树

B+树
1)基本定义与B-数相同。
2)若非叶子节点的键为K,那么它的指针数P为K,儿子树为K
3)所有的关键字都会在叶子节点出现,且按照叶子节点本身的依赖关键字大小顺序排序。

适合场景:B+树更适合文件索引和数据库索引。

7、有索引就一定快吗?

不是的。

8、应该在哪些列上加索引?(应用)

1)经常需要搜索的列,加快搜索速度
2)作为主键的列,强制该列的唯一性
3)经常用来连接的列,这些列主要是外键,可以加快连接速度
4)经常需要根据范围进行搜索的列,因为索引已经排序
5)经常需要排序的列

9、何时索引会失效?

1)条件中有or,即时其中有条件带索引也不会使用(要想使用or 又想让索引生效,只能将 or 条件中每个列加上索引)。
2)like 查询,以%开头。
3)若列类型为字符串,则一定要在条件中将数据用引号引起来,否则不使用索引
4)若 Mysql 估计使用全表扫描要比索引快,则不使用索引
5)对索引进行运算导致索引列失效

五、锁:

1、乐观锁 VS 悲观锁

乐观锁:每次进行数据操作时候都认为别人不会修改,所以不会上锁,但是更新时会判断别人有没有更新这个数据,适用于多读,比如write_condition。
悲观锁,每次进行数据操作时都认为别人会修改,所以每都会上锁。这样别人想拿这个数据就会Block知道他拿到锁。传统的关系型数据库就在很多地方用到这个机制,比如行锁,写锁。

2、数据库如何实现乐观锁和悲观锁

悲观锁:依靠数据库的锁机制。
乐观锁:基于数据版本,记录机制实现。
比如,为表增加一个version字段。读数据时,将版本号一起读出,之后更新时,版本号加1,将提交数据的版本号与数据库表对应记录的当前版本号对比。若提交的大于数据库里面的,则可以更新,否则认为是过期的数据。可以将乐观锁策略在存储过程中实现。

3、共享锁 VS 排他锁

1)共享锁又称读锁,若事务1对数据对象A加了共享锁,事务1可以读A但是不能修改A,其他事务只能再对他共享锁,不能加排他锁。这保证了其他事务可以读A,但是在事务1释放共享锁之前不能对A做任何操作。
2)排他锁又称写锁,若事务1对数据对象A加排他锁,事务1可以读A也可以修改A,其他事务不能对A加任何锁,直到事务1释放A上的锁。这保证其他事务在事务1释放排他锁之前不能读取和修改A。

六、Myisam VS Innodb

1、Myisam:不支持事务行级锁和外键约束。所以当执行 insert 和 update 时,执行写操作时,要锁定整个表,所以效率低。但是它保存了表的行数,执行 select count(*) from table时,不需要全表扫描,而是直接读取保存的值。所以若读操作远远多于写操作,并且不需要事务,myisam 是首选。

2、Innodb:支持事务、行级锁和外键,mysql 运行时,Innodb 会在内存中建立缓冲池,用于缓冲数据和索引。不保存表的行数,执行 select count(*) from table 时要全表扫描。写不锁定全表,高效并发时效率高。

七、数据库四大范式

1、第一范式:表的属性不可分
举例:一张用户表的电话字段可以被分为固定电话和手机两个字段,不符合第一范式。

2、第二范式:满足第一范式,非主键属性完全依赖于主键属性。
举例:一学生表,有学生姓名,学号,选修课程,课程教材,其中课程教材不是依赖学生,而是依赖选修的课程。

3、第三范式:满足第二范式,非主属性之间无传递依赖。

4、第四范式:主键属性之间无传递依赖

八、sql优化

1、对查询进行优化,要尽量避免全表扫描。在where和order by的列上加索引。
2、尽量避免在where子语句中用or,因为若一个字段有索引,一个没有,要全表扫描。
3、用like查询时,以通配符开头,如“%aba%”,会进行全表扫描。
4、使用复合索引时,必须要用到该索引的第一个字段,否则索引不被使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值