数据库复习四---理论知识的复习

                                                                    数据库复习四---理论知识的复习

1.表和视图的关联和区别

  表是什么?视图又是什么?

  表:是在数据库中最重要的对象,是数据库的基础,是基本的存储单元,用来存储数据,由行和列组成的。其中每一行表示一条记录常常对应java中的一个实例对象,每一列代表一个字段常常对应java的一个实例的一个属性。

  数据库表和字段命名规则:

   必须以字母开始;必须是1~30字符长度;只能包含字母、数字、_、$、#;不能使用Oracle关键字;同一个用户所拥有的的对象之间不能重名。

   数据库中的表的类型是:用户表和数据库字典表。

  视图:是表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含真实的数据,它提供了另一个视角查看或改变表中的数据。有些视图本质上是一个SQL语句的结果集。

由上面的视图和表的基本的概念,我们可以得知二者的关联和区别:

  二者的联系:“视图是基于表或另一个视图的逻辑表”由此可知视图是基于表上建立的表,其结构都是基于表的。它依赖于基本表存在,一个视图可以对应一个基本表,也可以对应多个基本表,视图是基本表的抽象和逻辑上建立的新关系。

  二者的区别:

1>、视图是已经编译好的sql语句。而表不是 
2>、视图没有实际的物理记录。而表有。 
3>、表是内容,视图是窗口 
4>、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改 
5>、表是内模式,视图是外模式 
6>、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。 
7>、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。 
8>、视图的建立和删除只影响视图本身,不影响对应的基本表

因为区别有许多,难以记忆,但是其区别没有离开二者的基本概念,都是基于二者的基本概念展开论述的。

2.简述索引、序列

   索引是数据库对象,通过指针的形式提高查询的速度。需要说明的是索引创建的一般规则:

   索引的创建主要是用来提高查询的速度的,所以当数据库需要高频率的查询,可以考虑创建索引,即使确定使用索引仍需要考虑创建索引所带来的开销,比如较小的表格就不需要创建索引了。    

   序列是产生一系列唯一数字的数据库对象。主要用于创建主键值。

3.简述some、any、all、union、union all的用法。

   some与any的用法相同。

   any的用法是:只要有一条数据满足条件,整个条件成立。

   all的用法是:必须所有的数据都必须满足条件,整个条件成立。

   union的用法是:SQL1 union SQL2 这是union关键字的语法。union操作符是用来合并两个或多个select语句的结果集,需要注意的是SQL语句的结果集必须有相同数量的列,列的顺序必须相同,union默认是去重的,如果要显示重复的数据则可以使用关键字union all。

4.SQL漏洞注入

     SQL漏洞注入发生的场景是:常见是在登陆、留言板界面。

     发生的原因是:字符过滤的不严谨造成的,可以得到管理员的账号密码等资料。

                              SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击

     发生的方式是:比如在登陆界面,需要我们输入用户名和密码。对应的验证的SQL语句是:

                               select * from users where userName='a' and passwd='123';

                              注入攻击:

                              select * from users where userName='a' or 1=1 and passwd='123' or 1=1;

                              或者

                                select * from users where userName='a' -- and passwd='123' ;

                              再或者加上分号:;  用来结束SQL语句。

    分析其特点是:上述的用户的在表单中的输入直接用来构造动态的SQL命令。黑客常常会在表单输入的过程中加入恒等式(or 1=1)、注释符(--)、SQL结束符(;)来恶意的破坏动态SQL命令的执行。

    解决的方法是:就上面出现的情况就是将这些非法字符过滤掉,我在了解到该情况后,就随机试了几个登陆网站的登陆页面,使用的方式是恒等式,有的在输入用户名时就会报错。这说明是在格式校验时就过滤了。

5.JDBC连接的步骤(面试重点)

    JDBC是什么?

    JDBC是java数据库连接,是一种用于执行SQL语句的API。

    1>加载驱动类

    2>获的连接对象Connection对象

    3>创建执行SQL语句的Statement对象

    4>执行SQL语句

    5>处理结果集 

    6>关闭连接

6.数据库连接池的原理及常见的数据库连接池的性能比较。

    数据库连接池产生的原因是因为数据库连接是昂贵的,有限的资源,对数据库连接的管理是对整个应用程序的健壮性、伸缩性影响是非常大的。数据库连接池就是因此产生的。

    数据库连接池的原理是:

      在系统初始化时,数据库连接作为对象存储到内存中,当用户访问数据库时,从数据库连接池中取出一个闲时已创建的数据库连接对象。使用完毕后,再将数据库连接放回数据库连接池中,以供下一个用户请求使用。而数据库的连接、断开是由数据库连接池自己管理的。可以通过设置来数据库连接的初始化数量、连接的上下线数、每个连接使用的最大次数、最大空闲时间、监视数据库连接的数量及连接的使用情况。

    简单的总结为:用时取,不用就放回。自己管理,可以设置。

    数据库连接池:dbcp、c3p0、proxool 

    性能评价:

          dbcp: 在具体的项目应用中持续运行的性能还可以,速度稍慢,在大并发量下压力下稳定性下降,不提供连接池监控。

         c3p0:在具体项目中持续运行的性能比dbcp要好,在大并发量压力下稳定性也有一定的保证,也不提供连接池的监控。

         proxool:在具体项目中其突出的优点就是能对连接池监控,常在开发测试阶段使用,但是其性能不如上面的两者。

         综合下来就这三种数据库连接池而言,推荐使用c3p0,其持续性能和大并发压力稳定性能都较好。但是在开发的测试阶段可以考虑是proxool,其具备监控连接池的功能,有助于确定连接是否断掉从而确定是否是代码的性能问题。

7.简述事务

     数据库是一种机制,是一组操作序列,包含一组数据库的操作命令,这组操作命令要么全部执行,要么全部都不执行。由此可知事务是一个不可分割的逻辑单元。在数据库系统上执行并发操作时事务作为最小的控制单元来使用。

     事务具有的属性(四性非常重要):

      原子性:事务是一个完整的操作。

      一致性:当事务完成后数据必须处于同一状态。

      隔离性:对数据进行修改的所有并发事务必须是相互隔离的

     持久性: 事务后,对于数据库作用在时间上是永久的。

     在刚一接触时,会忘记提交事务。比如:在创建完一个表格后就需要提交事务。在DOS端输入命令:commit 

8.简述Oracle触发器。

    触发器是数据库对象的一种,是一个特殊的过程,所以说,触发器类似函数和过程。是在事件发生时隐式的自动运行的PL/SQL程序块,不能插入参数,不能被调用。注意此处所表述的就已经能够看出Oracle触发器的具体表现形式是一段PL/SQL程序块,执行的条件是事件发生时。

9.存储过程

   存储过程是一组完成特定功能的SQL语句记录集,存储在数据库中,经过第一次编译后再次调用不许要编译,用户通过指定存储过程的名字和参数来执行它。存储过程是数据库重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

  存储过程的优点:

 1.可以模块化程序设计,也就是只需要创建一个过程,以后在程序中就可以调用任意次;

 2.可以更快执行,如果某操作需要执行大量的SQL或重复执行,存储过程比SQL语句执行的更快;

 3.减少网络流量,例如一个需要数百行的SQL代码操作有一条执行语句完成,不需要再网络中发送数百行代码;

 4.更好的安全机制,对于没有权限执行存储过程的用户,也可以授予他们执行存储过程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值