数据库复习

数据库复习_第1张图片

 

背景篇:

1.数据库是什么?和数据结构有什么关系

数据库是一类具体的软件,把很多数据给组织起来。在数据库这个软件的内部也会广泛的使用到数据结构。组织起来的目的:curd

数据结构是一门学科,描述数据是如何进行组织。把数据按照不同的结果组织起来的目的:curd

2.有哪些数据库软件

关系型数据库:对于内部的数据组织有严格要求


MySQL:当下互联网公司最广泛使用的数据库(开源免费)

Oracle:世界上最好的数据库(收费)

SQL Server:微软公司,早起捆绑销售造成不火

SQLite:超轻量数据库,在安卓系统中很多用到

非关系型数据库(了解)对于内部的数据组织无严格要求


Redis,HBase,MongoDB...

3.理解MySQL客户端服务器结构:一个应用程序,在实现一些核心逻辑的时候,并不是自己一个人完成的,而是通过网路和其他程序进行交互,共同完成这里的功能,在客户端的任意操作通过网络传输给服务器,及时在一个主机上。服务器是本体

4.理解服务器(电脑)由四部分构成,内存和外存的区别

5..MySQL基本组织数据的结构:

a)客户端服务器结构,服务器是本体

b)库(逻辑上的数据集合)--->表--->行(记录)---->列(字段)

二.SQL编程语言:

常考问题:

1.理解MySQL里有哪些数据类型

varchar(size)----->size表示字符最大长度,和char区别变长

decimal(M,D)----->有效数字,小数点后位数

test---->长文本

datatime--->日期类型

2.熟悉CRUD用法

3.掌握比较运算符:

a)注意=  <=>区别

b)<>表示!=

c)between and 表示[a,b]

d)in(a,b,c),出现过为真

e)is null,is not null

f)like 模糊匹配

g)and ,or,and优先级比or高

在条件查询中先执行where,符合条件的记录,再执行select前半部分决定显示哪些列,以及啥样的运算

select name,chinese+english+math as total from exam_result

order by是在查询结果出来后再排序

select name,chinese+english+math as total from exam_result order by total

h)null和其他值进行算术运算,结果还是null

i)delete删除后表还在,记录没了,drop连表都删没了

如何反制数据库的危险操作

1.权限控制

权限进行限制,不是所有的人都能操作,把高风险的操作,集中在有经验的大佬手里

2.备份:

对数据内容进行定期/实时备份

如果一旦数据出现严重问题,就可以进行恢复

3.把问题扼杀在摇篮

找个有经验的大佬一起

数据库的查询操作,是用索引方式实先

约数部分:

primary key:主键要保证唯一性,主键也不能为空

什么是自增主键,如何用

什么是数据库分布式部署:

数据太大,一台机器存不下,使用多台机器分布

分布式系统下,生成唯一ID算法:

时间戳+机房编号/主机编号+随机因子--->哈希值

理解伪随机:通过一系列数学变换,生成一串看起来没啥关系的数据序列,初始值称为随机种子

笛卡尔积:行数是积,列数是和

多表查询步骤:

a)笛卡尔积

b)加上连接条件

c)加上其他条件

d)对结果的列进行精简

理解左外连接和内连接区别:

左外连接就是尽可能显示左表中的数据,如果右边没有就填null,当左侧表中每条记录在右侧都有所体现时候都一样

理解奇淫巧技自连接,把行关系转换为列关系,理解自连接需要起别名,适用于行和行比较

理解套娃思想子查询,子查询返回多条记录用in,

常见面试题:

1.谈谈如何理解索引:

a)索引是干啥的(解决了啥问题)

索引类似于目录,主要存在意思是提高查询效率

举例说明,书,书籍,目录和数据库,表,索引之间关系

b)索引付出的代价:

1.消耗更多的空间

2.虽然提高了查询效率,但是降低了增加,删除,修改的效率(插入新的记录,需要既能够插入硬盘的数据,又要调整索引

c)索引背后的数据结构:

b+树

先谈谈b树

n×搜索树,每个结点可能包含n-1个值,还可能更少,n-1个值把区间划分成n份,这样的意义是表示同样的元素数据集合的时候,比二叉树的高度小,io次数也就降低了不少

引申到b+树

b+树n个值划分成n个区间

b+树和b树比,值可能会重复出现(父元素的值在子元素是以最大/最小的姿态出现的)

在叶子结点这里,b+树会把所有叶子结点,以链表的形式首尾相连(便于范围查找)

正因为,叶子结点是全集数据,只需要把每一行(每一条记录的完整的所有列关联到叶子结点上即可)非叶子结点,只需要保留索引列(只存个id),非叶子结点占用空间非常小(相比于完整的数据集合)就可以在内存中缓存,因此进一步减少了硬盘的Io

2.谈谈如何理解事务:

1.事务是干啥的(从原子性切入)

事务能够把多个SQL打包成一个整体,要么都执行完要么一个都不执行(如果执行出错,则会自动回滚)转账,突然数据库挂了,账号怎么变???

2.事务的其他特性还有啥

一致性:事务执行前后,数据处在一致的状态(数据能对的上,合情合理)

持久性:事务进行的改动,都是写到硬盘里的,不会随着程序的重启/主机重启而丢失

隔离性:并发执行的时候,事务之间能够保持隔离,不相互打扰

3.重点隔离性,在并发执行事务下会有哪些问题,以及如何解决

脏读:事务a修改未提交时,事务b读到了修改时的脏数据(写的时候读了)------->写加锁(写时不读)

不可重复读:一个事务a多次读取同一个数据,发现不一样(读的过程被修改了)---->读加锁(读时不写)

幻读:读A改b(结果集变了) ---------->串行化(读时啥也不干)

4.MySQL的隔离级别有哪些,和上面的问题如何应对

 -read uncommitted  允许读未提交的数据  并发max  隔离min 可能存在脏度/不可重复读/幻读
 -read committed  只能读提交之后的数据 写加锁  解决了脏度
 -repeatable read(默认)读和写都加锁  解决了脏度/不可重复读
  serializable 严格执行串行化,并发min,隔离max ,都解决,效率最低

jdbc操作:

1.创建数据源对象

2.建立连接(用户输入)

3.构造要执行的sql语句并解析

4.执行sql

// executeUpdate 对应插入删除修改语句. 返回值表示这次 SQL 操作影响到的行数.

// executeQuery 对应查询语句. 返回值则是返回的临时表数据.ResultSet

5.释放资源

你可能感兴趣的:(数据库)