数据库 & JDBC

数据库 & JDBC

数据库三范式是什么

什么是范式:简而言之,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的数据库是需要满足一些规范来优化数据库存储方式。在关系型数据库中这些规范就可成为范式。
第一范式:当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求。(列不可再分)
第二范式:如果关系模式R满足第一范式,并且R的所有非主属性完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。(属性完全依赖于主键)
第三范式:属性不依赖于其他非主属性,属性直接依赖于主键。即数据不能存在传递关系。

SQL分为哪几个大类

SQL语言按照实现的功能不同,主要分为四类:

  • 数据定义语言(DDL)
    Data Definition Language : 数据库定义语言,操作数据库,表(创建,删除,修改)。常用命令有create、drop、alter
  • 数据操纵语言(DML)
    Data Manipulation Language :数据库操作语言,操作表的数据(插入,删除,修改)。常用的命令insert,delete,update。
  • 数据查询语言(DQL)
    Data Query Language :数据库查询语言,操作表的数据,查询表的数据。常用命令select。
  • 数据控制语言(DCL)
    Data Control Language :数据控制语言,常用命令grant,revoke

having、where、groupby的执行顺序

select
from
where(先过滤单表/视图/结果集,再join)
group by
having (where过滤的是行,having过滤的是组,所以在group by 之后)
order by

什么是事务,事物有哪四个特性(详细解释,其中由隔离性触发的问题有哪些)

事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操纵;这些操作作为一个整体在一起向系统提交,要么都执行,要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元)
事务具有4个属性,通常称为ACID特性:

  • 原子性(Atomicity):操作这些指令时,要么全部执行,严么全部不执行。只要其中有一个指令执行失败,所有指令都执行失败,数据进行回滚,回到执行指令之前的数据状态。
  • 一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但对于整个数据的完整性保持稳定。
  • 隔离性(Isolation):是当多个用户并发访问数据库时,比如操作同一张表,数据库为每一个用户开启的事务,不能被其他事务所干扰,多个并发事务之间要相互隔离
  • 持久性(Durability)当事务正确完成后,它对于数据的改变是永久性的。
    并发导致的事务问题
  • 脏读:是指在事务处理过程里读取了另一个未提交的事务的数据
  • 幻读:一个事物执行两次查询,两次查询到的结果不一致。比如第一次共查到10条结果,第二次差到了11条结果。
  • 不可重复读:一个事物两次读取同一行数据,得不到同样的结果。
    事务的隔离级别
    -读未提交:就是一个事物可以读取另一个事物未提交的数据
  • 读已提交:一个事物要等另一个事物提交之后才能读取数据。可避免脏读的发生(Oracle默认事务隔离级别)
  • 可重复读:就是在开始读取数据时,不在允许修改操作。可避免脏读、不可重复读的发生。(MySQL默认事务隔离级别)
  • 可串行化:是最高的事务隔离级别,在该级别下,事务串行化,可避免脏读、幻读、不可重复读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不推荐。

具体分析

Oracle和MySQL的区别(包括默认事务隔离级别)

  • Oracle是大型数据库而MySQL是中小型数据库;MySQL是开源免费的,Oracle是收费的
  • 对事务的提交:MySQL是默认自动提交,而Oracle默认不自动提交,需要用户手动提交。
  • 分页查询:MySQL是直接在SQL语句中用limit就可以实现分页;而Oracle则是需要伪列ROWNUM和嵌套查询
  • 事务的隔离级别:MySQL是可重复读,Oracle是可重复读
  • 对事务的支持:MySQL对事务是默认不支持的,只是有些存储引擎如:innodb可支持事务;而Oracle对事务是完全支持的。
  • 并发性:MySQL以表锁为主,对资源锁定的力度很大,如果一个session对一个表的加锁时间过长,会让其他session无法更新此表的数据。Oracle使用行级锁,对资源锁定的力度要小很多,知识锁定SQL需要的资源,并且加锁是在数据库中的数据行上,不依赖索引。所以Oracle对并发性的支持要好很多。
  • 持久性:Oracle保证提交的事务均可以回复,因为Oracle把提交的SQL操作写入了在线联机日志中,保存到磁盘上,如果出现数据库或主机异常重启,重启Oracle可以靠联机在线日志恢复客户提交的数据。MySQL默认提交SQL语句,更新过程中如果出现主机重启问题,可能会丢失数据。

什么是视图,以及视图的优缺点

视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储

什么是索引,索引的分类,索引有哪些优缺点,建立索引有哪些原则

  • 为什么要用索引:索引在数据库中的作用是快速找出某个列中一个特定值的行,不使用索引的话,MySQL必须从第一条记录遍历进行查询至相关行,表越大花费时间越多,但是有索引,就能够快速的到达某个位置去搜索数据,索引对优化数据库查询有着不可替代的作用。
  • 索引的优点:
  • 通过创建索引,可保证数据库中每一条数据的唯一性
  • 可大大提高查询效率
  • 可加速表与表之间的连接
  • 可显著减少查询中分组和排序的时间
    总结:查询速度快
  • 索引的缺点:
  • 创建索引和维护索引需要时间,而且数据量越大时间越长
  • 创建索引占用磁盘空间,如果有大量索引,可能比数据文件跟快达到最大文件尺寸
  • 对表中的数据进行增加、修改、删除的时候,索引也是需要维护的,降低了维护速度。

总结:并不是索引越多越好,够用就好

如何优化数据库

  • 优化索引、SQL语句、分析慢查询
  • 设计表的时候严格根据设计规范来设计数据库
  • 使用缓存,把经常访问且不需要变化的数据放到缓存中
  • 采用MySQL内存自带的表分区技术,把数据分层到不同的文件中
  • 主从分离读写,采用主从复制把数据库的读操作和写操作分离开
    详解优化数据库

描述JDBC连接数据库的步骤

JDBC连接数据库步骤

什么是SQL注入,怎样防止

SQL注入:是一种注入攻击,可以执行恶意SQL语句,从而绕过网页或Web应用程序的身份验证或授权,并检索整个SQL数据库的内容,还可以使用SQL注入来添加,修改和删除数据库中的记录。
如何防止SQL注入?

  • 采用PreparedStatement来代替Statement。因为PreparedStatement支持动态设置参数,Statement不支持;PreparedStatement支持预编译,可防止SQL注入,Statement不支持。
  • 使用正则表达式过滤传入的参数
  • 字符串过滤、敏感词过滤

什么是数据库连接池,实现原理以及优势(JDBC连接过程)

具体分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值