Java面试准备之数据库

一、考察点
1.联结
1.1 联结的概念:
简单的说,联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。
1.2 联结的分类

注意:联结并不代表只有使用join关键字的才算是联结,where也算是联结的一种实现方式。
1.2.1内部联结
内部联结也成为等值联结,它基于两个表之间的相等测试,基本实现方式由以下两种格式:
1.SELECT name,price FROM 表1 INNER JOIN 表2 ON 表1.id = 表2.id
2.SELECT name,price FROM 表1,表2 WHERE 表1.id = 表2.id
1.2.2 自联结
自联结的使用情形是在同一张表中进行查询,自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终结果是相同的,但有时候处理联结远比处理子查询快得多。
1.select id,name from 表1 where id = (select id from products where id = ‘DTNTR’)(子查询方式)
2.select p1.id,p1.name from products as p1, products as p2 where p1.id = p2.id and p2.id = 'DTNTR'(自联结方式)
1.2.3 自然联结
当对表进行联结时,可能会出现一个列出现在不止一个表中,标准的联结返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使得每个列只返回一次。
实现方法:一般是通过对表使用通配符,对所有其他表的列使用明确的子集完成的(个人理解是使用全限定表明)。
1.2.4 外部联结
许多联结将一个表中的行与另一个表中的行相关联,但有时候会需要包含没有关联行的那些行,包含了那些在相关表中没有关联行的行,这种联结称为外部联结
外部联结的类型:外部联结存在两种基本类型:左外部联结和右外部联结,他们之间的唯一差别是所关联的表的顺序不同
外部联结的实现:使用OUTER JOIN来实现,细分为两种格式: 1.
右外联结:A right outer join B 实现效果:选中右表中的所有行
左外联结:A left outer join B 实现效果:选中左表中的所有行
2.视图
概念:视图是虚拟的表,个人理解是:访问频次最高的不是整个表,而是表中经过某些条件筛选出来的结果集,而将这些数据使用视图的方式创建后,首先提高了访问的速度,因为不再需要查询全表了,只需要在视图的结果集上操作即可,另一方面大大简化了SQL书写的复杂度,避免了子查询等实现方式带来的冗余查询时间了。
视图的基本操作:
创建:CREAT VIEW AS +SELECT语句 =>视图中即存储了SELECT语句查询出来的结果集
使用:使用视图名访问,与表的使用相同
删除:DROP VIEW viewname
注意:视图中的数据能否更新?答案视情况而定,其实对视图增加或者删除行,实际上是对基表增加行或者删除行。视图中有定义以下操作,则不能进行更新,比如联结,子查询,并等等。
3.存储过程
概念:简答来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。
优点:简单、安全、高性能。简单:不再需要反复建立一系列的处理步骤,简化了复杂的操作,类似封装,但是存储过程的编写比基本SQL要复杂得多。安全:减少了其他原因对数据的错误修改。高性能:查找速度块。
建立:CREATE PROCEDURE productpricing(OUT A1,IN A2)
BEGIN
SQL CODE
INTO
END
调用:call productpricing(@参数1(输出变量名),2000(传入数据))
删除: drop 名字
4.游标
概念:当我们需要在检索出来的行中前进或者后退一行,就需要使用游标了。游标是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。
注意:游标只能用于存储过程和函数
使用步骤:
1.声明游标 DECLARE 游标名 CURSOR
2.打开投标 OPEN
3.使用循环或判断语句等结合FETCH对检索的结果集操作,根据需求可存进不同的变量中返回
4.关闭游标 CLOSE
5.触发器
概念:触发器是MySQL相应DELETE,INSERT,UPDATE时自动执行的一条MySQL语句(或位于BEGIN和END之间的一组语句)
创建触发器需要给出四条信息:唯一触发器名、触发器关联的表、应该响应的活动(delete/insert /update)、触发器何时执行(处理之前或之后)
eg:CREATE TRIGGER 触发器名 AFTER INSERT ON 表名
FOR EACH ROW 触发操作
6.事务
关于事务的几个术语:
事务:指一组SQL语句
回退:撤销指定SQL语句的过程
提交:将未存储的SQL语句结果写入数据库表
保留点:指事务处理中设置的临时占位符,可以对它发布或回退
7.范式
首先三范式是关系型数据库的设计规范,为了保持数据完整性的同时最小化数据冗余。各种范式呈递次规范(即第一范式是第二范式的基础,第二范式是第三范式的基础),越高的范式数据库冗余越小,但实际情况应该根据当时场景、需求、模型等来决定。
1)第一范式(1NF)
每个属性(每个列值)具有原子性,不可再分。即表中的每一行只包含一个实体的信息,而每一行的每一列只能存放实体的一个属性。
例:学号 姓名 性别 班级
201202031078 梁子轩 男 12级2班
以上违反1NF,班级这一列可拆为:
学号 姓名 性别 年级 班级
201202031078 梁子轩 男 12级 2班
2)第二范式(2NF)
在1NF的基础上,实体的属性完全依赖主关键字(主键),即不能存在仅依赖主关键字的一部分属性。
例:表A: 主键 属性
员工编号、岗位 →(决定)→ 姓名、年龄、学历、基本工资
以上违反2NF,关系可拆为两个表:
表B:员工编号 →(决定)→ 姓名、年龄、学历
表C:岗位 →(决定)→ 基本工资
3)第三范式(3NF)
在2NF的基础上,任何非主属性不依赖于其他非主属性(消除传递函数依赖)。所谓传递函数依赖,就是关键字段A决定非关键字段B,非关键字段B决定非关键字段C,则非关键字段C传递函数依赖于关键字段A。
例:员工编号 →(决定)→ 姓名、年龄、部门编号、部门经理
以上满足2NF,但违反了3NF,因为存在以下传递函数依赖,
员工编号 →(决定)→ 部门编号 →(决定)→ 部门经理
可拆分为以下两种关系(表):
A:员工编号 →(决定)→ 姓名、年龄、部门编号
B:部门编号 →(决定)→ 部门经理
8.引擎
9.分区
二、MySQL优化
Java面试准备之数据库的更多相关文章
- Java面试知识点之数据库篇(一)
前言:数据库的相关知识,在面试中也经常出现,笔者认为非常有必要对此类知识进行相关总结. 1.索引 索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构. 通俗理解:索引就 ...
- [Java面试十二]数据库概念相关
1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的SQL语句,它的优点有: 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次. 允许更快执 ...
- Java面试07|Redis数据库
1.Redis持久化的几种方式 (1)RDB(Redis DataBase)持久化 (2)AOF(Append Only File)持久化 2.Redis的缓存失效策略 主要涉及到expire对主键过 ...
- JAVA面试常见问题之数据库篇
1.MySQL 索引使用的注意事项 更新频繁的列不要加索引 数据量小的表不要加索引 重复数据多的字段不要加索引,比如性别字段 首先应该考虑对where 和 order by 涉及的列上建立索引 2.D ...
- Java面试系列
如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2) ...
- Java 面试知识点解析(六)——数据库篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java面试准备十六:数据库——MySQL性能优化
2017年04月20日 13:09:43 阅读数:6837 这里只是为了记录,由于自身水平实在不怎么样,难免错误百出,有错的地方还望大家多多指出,谢谢. 来自MySQL性能优化的最佳20+经验 为查询 ...
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
随机推荐
- angr进阶(2)C++程序的处理
如何应对C++程序 angr只实现了C库,所以应对C++程序,需要使用full_init_state方法,并设置unicorn引擎.csaw_wyvern 并且这个过程相对于C通常会更长 st = p ...
- python实战学习之matplotlib绘图续
学习完matplotlib绘图可以设置的属性,还需要学习一下除了折线图以外其他类型的图如直方图,条形图,散点图等,matplotlib还支持更多的图,具体细节可以参考官方文档:https://matp ...
- 从零开始学安全(三十四)●百度杯 ctf比赛 九月场 sqli
先扫后台发现 两个可疑登录界面 l0gin.php login.php 猜测是第一个 用bp 抓包发现 index.php 中间有302 重定向 头文件 里面有一个 page=l0gin.php 应该 ...
- 罗汉果与Java虚拟机系列目录与说明
声 明 罗汉果与Java虚拟机系列博文仅为本银结构性整合Java虚拟机知识的笔记和日常JVM问题的DEBUG记录.放到网上主要是为了方便自己今后查看.顺带能帮助到别人就更奈斯了. 目 录 ...
- sql server去掉某个字段前后空格问题
数据通过页面表单保存到数据库,由于有个选项是一个树形的下拉框,导致保存的这个字段的数据前面有空格,在sql server中可以使用 SELECT LTRIM(RTRIM(BelongPartyCode ...
- cSharp:反射 Reflection
/// <summary> /// 利用反射调用插件方法 /// 涂聚文(Geovin Du) /// 2019-03-27 /// /// </summary> /// &l ...
- #WEB安全基础 : HTML/CSS | 0x8CSS进阶
你以为自己学这么点CSS就厉害了? 学点新东西吧,让你的网页更漂亮 我们只需要用到图片和网页 这是index.html的代码 <html> <head> <title ...
- 自定义控制台程序导出角色对实体的权限为Excel文件
本人微信公众号:微软动态CRM专家罗勇 ,回复282或者20181116可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 先上 ...
- 德国慕尼黑.NET俱乐部VS2019发布活动
就在广州.NET俱乐部紧锣密鼓的准备配合VS2019发布搞一场大Party的时候,德国慕尼黑.NET俱乐部早就已经对外宣布他们将会配合VS2019发布搞两场活动,注意,是两场哦,不是一场哦. 第一场是 ...
- 从.Net到Java学习第十篇——Spring Boot文件上传和下载
从.Net到Java学习系列目录 图片上传 Spring Boot中的文件上传就是Spring MVC中的文件上传,将其集成进来了. 在模板目录创建一个新的页面 profile/uploadPage. ...