面试葵花宝典-数据库1

1. 什么是触发器?触发器的作用?

触发器是一种专用类型的存储过程,它被捆绑到SQL Server 的表格或者视图上。

触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

2. 什么是存储过程?用什么来调用?简述其优缺点。

存储过程是一个预编译的SQL语句,允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

可以用一个“execute 存储过程名 参数”命令来调用存储过程。

优点:响应时间上来说有优势,可以给我们带来运行效率提高的好处,且使用存储过程的系统更加稳定

缺点:维护性较差,相对于简单sql,存储过程并没有什么优势,并且在进行调试时比较困难

3. 简述索引的作用。

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。

4. 主键和索引的区别?

1.主键是为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引;

2.数据表中只允许有一个主键,但是可以有多个索引;

3.使用主键数据库会自动创建主索引,也可以在非主键上创建索引,方便查询效率;

4.索引可以提高查询速度,它就相当于字典的目录,可以通过它很快查询到想要的结果,而不需要进行全表扫描;

5.唯一索引则标识该索引值唯一,可以由一个或几个字段组成,一个表可以有多个唯一索引。

5. 什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后由于某种原因程序未释放或无法释放,造成系统内存的浪费。导致程序运行速度减慢甚至系统崩溃等严重后果。

6. 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

首先尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。

其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。

最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

7. 什么是事务?

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句组,如果任何一个语句操作失败那么整个操作就被失败,进而回滚到操作前状态,或者是上个节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

8. 什么是锁?

在所有的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

9. 什么叫视图?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是由一个表或者多个表的行或列的子集。它使得我们获取数据更容易,相比多表查询。

10. 视图创建和使用语法?

1.首先判断是否存在

if exists (select * from sysobjects where name = '视图名')drop view View_EdsProdGo

2. 创建视图

create view View_EdsProd as select * from Tab_EdsProd where Mid>1(条件) go

3. 使用视图

select *from View_EdsProd

11. 游标是什么?

游标是SQL 的一种数据访问机制。可以将游标简单地看成是查询的结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览需要的数据。

12. 简要叙述一下SQL Server 中使用的一些数据库对象?

表、索引、视图、存储过程、触发器、用户定义函数、数据库关系图、全文索引。

13. NULL是什么意思?

NULL(空)这个值表示UNKNOWN(未知):它不表示""(空字符串)。不能把任何值与一个 UNKNOWN值进行比较,都会生产一个NULL值。您必须使用IS NULL操作符。

14. 什么是索引,有哪些索引,具体怎么用?

索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。

索引分为聚集索引和非聚集索引。

在数据库系统中建立索引主要有以下作用:

(1)快速取数据;

(2)保证数据记录的唯一性;

(3)实现表与表之间的参照完整性;

(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。

15. SQL Server 里有什么类型的索引?

在SQL Server里,它们有两种形式:聚集索引和非聚集索引:

聚集索引在索引的叶级保存数据。每个表格只会有一个聚集索引。

非聚集索引在索引的叶级有一个行标识符。每个表格有多个非聚集索引。

16. 什么是主键?

主键是表格里的(一个或多个)字段,只用来定义表格里的行;

主键里的值总是唯一的。

17. 什么是外键?

外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

18. SQL Server 有什么不同类型的触发器?

有INSTEAD-OF和AFTER两种触发器。例如,如果有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是执行更新语句则不会执行操作。AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

19. 您如何确保一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

第一个答案是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只允许有已经在另一表格里的某个字段里定义了的值。通常是另外一个表格的主键。

第二种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。

20. 对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

21. 你可以用什么来确保表格里的字段只接受特定范围里的值?

可以使用Check约束,它在数据库表格里定义,用来限制输入该列的值。

触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,可能会在某些情况下影响到性能。

22. 什么是相关子查询?如何使用这些查询?

相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会请求外部查询的值,从而形成一个类似于循环的状况。

23. 什么是SQL注入式攻击?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

比如:攻击者在用户名字和密码输入框中输入"'or' 1'='1"之类的内容。最后得到的SQL命令可能变成:SELECT * from Users WHERE login = '' or '1'='1' AND pwd = '' or '1'='1'。这时,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

24. 如何防范SQL注入式攻击?

只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

⑴ 对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。

第二:删除用户输入内容中的所有连字符。

第三:对于用来执行查询的数据库帐户,限制其权限。

⑵ 用存储过程来执行所有的查询。

⑶ 限制表单或查询字符串输入的长度。

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。

⑸ 将用户登录名称、密码等数据加密保存。

⑹ 检查提取数据的查询所返回的记录数量。


今天就先到这里,点个关注,后续继续整理更新!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世人万千丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值