有谁知道新蛋科技软件测试面试题啊?
发布网友
发布时间:2022-04-22 10:00
我来回答
共1个回答
热心网友
时间:2023-10-31 14:38
1、 存储过程在软件开发中有什么样的优势和劣势,有什么样的缺点。
答:存储过程的优点:
(1) 允许模块化程序设计,以后可以重复调用;可以由专人来完成,并可独立于程序源代码而单独修改。这样一个项目在需求分析、界面设计以及数据库设计完了以后,就可以开始写存储过程了,同一时间数据访问层也可以开始写了。没有必要等详细设计说明完成了在编码的时候才开始写SQL语句。
(2) 执行更快
存储过程都是预编译命令,执行起来比SQL语句更快。
(3) 减少网络流量
(4) 可作为安全机制,能够屏蔽数据库,用户并不知道数据库的真实结构。
存储过程的缺点
最大的缺点就是更换数据库的时候,比如SQL_Server数据库换成Oracle数据库时SQL_Server数据库的存储过程在Oracle当中完全不能用,只能重新用Oracle的命令来写存储过程。
2、 如果你的项目在开发时使用了存储过程,在改换数据库时,会发生什么样的问题,如何解决?
答:更换数据库的时候,比如SQL_Server数据库换成Oracle数据库时SQL_Server数据库的存储过程在Oracle当中完全不能用,只能重新用Oracle的命令来写存储过程。
对于这个问题,解决的办法是:采用统一的数据库建模工具,比如( ),所有的数据库设计全部在这个统一个数据库建模工具里进行,存储过程也可以在这里完成。最后在根据需要转设成具体的某一种数据库,如果需要SQL_Server就转变成SQL_Server数据库,如果需要Oracle就转变成Oracle数据库。
3、 在存储过程中如果前面的语句发生错误,后面的语句会不会执行,为什么。
4、 在存储过程中,怎样进行异常处理?
5、 存储过程的输出参数有几种形式,分别介绍一下, 返回值的类型有没有什么*?
答:在SQL_Server中有四种形式:
(1)、以OUTPUT参数形式返回数据,返回值的类型*为:整形值、字符值也可以是游标变量,这种形式,可以一次返回多个值。
(2)、以Return的形式返回值,返回值的类型*为:整形值, 以表明过程的执行状态。
(3)、返回SELECT语句的结果集。
(4)、可以返回能从存储过程外引用的全局游标。
在Oracle中有三种形式:
(1)、以OUT参数形式返回数据,返回值的类型*为:不可以是大数据类型如:LOB、CLOB、BFILE等。
(2)、以IN OUT形式返回数据,返回值的类型*为:也不可以是大数据类型。
(3)、返回SELECT语句的结果集。
在Oracle中存储过程没有Return的返回值,只有方法Function才有返回值
6、 如果两个不同的存储过程在一个方中被同是调用,当其中任一个发生异常时,要求同时回滚两个存储过程的操作,怎么样处理?
答:可以创建另个一个存储过程,在这个存储中,创建一个自组事务,在这个自组事务中分别去调用那两个存储过程。语法如下:
create procere CallTwoProc
as
begin transaction
execute 第一个存储过程
execute 第二个存储过程
commit transaction
go
7、 请谈一谈视图的优点(创建视图的必要性)。基于视图的增删改会带来什么样的问题,如何解决样的的问题?
答:视图的优点:
(1)、可以筛选表中的行。
(2)、可以将多个物理数据表抽象为一个逻辑表,有利于跨库操作。
(3)、防止未经许可的用户访问敏感数据。
(4)、降低数据库的复杂程度。
(5)、视图是一种抽象表,它不占用存储空间。
基于视图的增删改会带来两个的问题:
(1)、INSERT、UPDATE和DELETE语句都必须要满足视图的条件,即视图要能看得到的才能INSERT、UPDATE和DELETE。通过视图的删除数据,要慎用,如果视图看不到的,无法删除。
解决办法:给视图加上with check option约束之后,基于视图的更改,凡是不符合视图约束(where……)的修改、插入、删除时会报错,用以*对视图的修改。
(2)、当一个视图是基于多个基表建立的,在视图上修改数据时,只能INSERT或UPDATE基于一个基表的字段的值,无法同时修改两个或以上的基表的字段。DELETE不能运行,因为DELETE语句仅在视图的FROM子句中只包含一个表时才可以引用更新视图。
解决办法:建立INSTEAD OF触发器,把对视图的INSERT、UPDATE、DELETE操作转换为分别对几个基表的INSERT、UPDATE、DELETE操作,分作几步进行。这样对视图的INSERT、UPDATE、DELETE操作就有效了。
8、 索引有什么样的优点,也有什么样的缺点,我们在运用索引的时候,是显示运用的吗,那是怎么样应用的呢,请举例说明。
答:索引的优点:可以加快我们的查询速度。
索引的缺点:
(1)、当我们INSERT、UPDATE、DELETE时 ,数据库系统总是要去 更新每一个索引,因此而浪费很多时间。所以在基于事务的系统中,应尽量少建立索引。
(2)、带索引的给在数据库中会占据更多的存储空间。
索引并不显示使用,而是在执行SQL语句时,当中含有WHERE、ORDER BY、GROUP BY、HAVING等了句时,即凡是有对数据进行搜索和排序的语句,查询优化器组件会找出查询效率最高的办法,而查询优化器就会选择最优的索引进行工作。
9、 如果一个表其中有三个字段很常用,它们是A,B,C三个字段 ,其中B字段更常用,那么这时我们应该怎么样创建索引。
答:创建一个组合索引,其中包括A、B、C三个字段 ,但一定要把B字段放在最前面。
因为B字段最常用,它的唯一性应该是最高的。
10、如果一个表有10万条记录,其中有10个它段非常常用,我们应该怎么样他建索引。
答:创建一个组合索引,其中只包括非常常用的10个字段 ,排列的顺序一定是按唯一性的高低进行排列,唯一性最高的字段放在最前面,唯一性最低的放在最后面。
11.触发器会产生递归调用吗,请举例说明,像这种情况,我们应该怎么样避免呢?
答:触发器会产生递归调用。有两种情况
第一种:直接递归 即触发器被激发并执行一个操作,而该操作又使同一个触发器被激发。
第二种:间接递归 即触发器被激发并执行一个操作,而该操作又使另一个触发器被激发。第二个触发器又使得第一个触发器的原始表得到更新,从而再一次引发第一个触发器。
避免的办法有:
(1)、在编写触发器里,人为的注意到这一点。
(2)、防止直接递归:alter database pubs set RECURSIVE_TRIGGERS OFF
防止间接递归:请将 nested triggers 服务器选项设置为 0。
12、如果基于一个基表创建了很多个同种类型的触发器,比如UPDATA触发器,我们跟据什么来确定他们所执行的顺序?
13、(1)在数据查询中,我们需要把两个或者多个表作横方向联接,用什么命令?
答:用联接来解决这个问题join…..on
(2)请问联接有多少种类,分别是哪几种?
答:有三种,他们是左联接 left join ….on,右联接 right join…..on, 内联接inner join……on或者join……on。
(3)在联接中,用什么来指定联接的条件?
答:用on
(4)在联接查询查询中,有没有规定在所查询的两个表的字段中一定要有主键字段?
答:没有这种说法,不一定必须查询主键,正确的说法是:典型的联接是指定一个表的外键以及在另一个表上的关联键。
14(1)在数据查询中,我们需要把两个或者多个表作纵方向联接,用什么命令?
答:使用Union联合命令。
(2)在使用Union联合命令时,我们应注意些什么?
答:所联合的几个查询,字段名可以不相同,但是字段类型、字段数都必须要相同。
(3)请说一说Union和Union All这两个命令的区别?
答:Union命令得到的结果会去掉重复项,作了一个distinct操作。
Union All命令不会去掉重复项。
15、数据库的安全和管理方面的间题没有问。
依往年来说,第一到第七题常问,你看看吧