数据库考点之存储过程及其他操作使用场景

如题:2019年10月

注:先要明白概念:

存储过程:实质上就是就是存储在数据库中的一段代码,可以看作是mysql批处理。

存储函数:实质就是存储过程,只不过有自己固定的特性。书中也给出了和存储过程的区别:

到这里就很明显了,考点就是区别这里,答案,选A.

扩展:存储过程与函数,可以看作是面向对象中的对象方法。它的重要特点就是“存储”,要不要存储,何时需要存储呢??下面只给出最适合的场景:

存储过程

存储过程是在数据库中封装数据库逻辑的众多机制之一。它们与常规编程语言过程相似,因为它们接受参数,执行某些操作,有时返回结果,有时甚至更改将参数声明为输出参数时所采用的参数值。您会发现它们与存储函数非常相似,因为它们可以返回数据。但是,存储过程不能在查询中使用。由于存储过程具有接受声明为OUTPUT的参数的机制,因此从理论上讲,它们可以返回多个输出。

较长的SQL易于阅读和维护5(存储过程的一大优势是,您可以拥有很长的sql语句事务和条件循环,这些事务可以一次全部提交或作为一个单元回滚。这也节省了网络流量。
可用于更改表中的数据,而无需授予用户直接更改表的权限4通常,对于大多数支持它们的DBMS都是如此。
可以被多个应用程序和接口调用4(通常可以调用它们,但是并不总是可以使用OUTPUT参数)

 

存储的功能(存储函数)

存储功能与存储过程非常相似,除了3种主要方式。

  1. 与存储过程不同,它们可以在视图,存储过程和其他存储函数中使用。
  2. 在许多数据库中,禁止它们更改数据或具有ddl / dml限制。请注意,对于诸如PostGreSQL之类的数据库,这是不正确的,因为存储函数和存储过程之间的界线非常灰
  3. 它们通常不能采用输出参数(占位符),然后将其与更改后的值一起传回。
可以被多个应用程序和接口调用4(通常可以调用它们,但是并不总是可以使用OUTPUT参数)
数据库内的可重用性5(您可以在视图,其他存储函数和存储过程中重用它们)。从DBMS到DBMS,这略有不同。
较长的SQL易于阅读5-是-您可以进行相当密集的多行处理,最终将一个值或表返回给用户。

视图:

视图的主要优点在于,它在大多数情况下都可以像表一样使用,但是与表不同,它可以封装非常复杂的计算和常用联接。除了存储过程,它还可以使用数据库中几乎所有对象。当您总是需要连接同一组表(例如带有订单明细的订单)以获取摘要计算字段等时,视图最有用。

可以被多个应用程序和接口调用5(通常可以在可以调用几乎任何地方的表的任何地方调用它们)
可以接受不确定数量的参数5(您可以像从表中一样从视图中选择列和行的子集)
数据库内的可重用性5(您可以在其他视图,存储的函数和存储的过程中重用它们)。
给定不同的参数可以返回不同数量的字段。4 –(您可以像从表中那样从视图中选择列和行的子集)。但是,您无法更改基础结构,例如,像使用存储过程或函数一样,从一组不同的表中返回记录。

触发器和规则:

触发器是通常绑定到表或视图的对象,这些对象根据某些事件(例如,插入数据,在插入数据之前,更新/删除数据之前以及在这些事件发生之前)运行代码。

触发器可以是非常伟大的事情,也可以是非常危险的事情。从某种意义上讲,它们很难调试,但具有强大的功能,因为没有触发器更新表就很容易逃脱触发器,因此具有危险性。

它们对于确保在插入或更新数据时总是发生某些事件很有用-例如,设置字段的复杂默认值,将日志记录插入其他表中。

可以被多个应用程序和接口调用5(它只是在幕后发生。没有应用程序可以逃脱它们)
可用于更改表中的数据,而无需授予用户直接更改表的权限。4对于支持它们的数据库,通常是
较长的SQL易于阅读。触发器通常可以由管理设计人员定义,也可以使用颜色编码的sql编辑器定义,因此相当容易阅读5

外键约束,主键约束,参照完整性,级联更新/删除

没有约束,引用完整性和级联更新/删除的真实数据库。您可以使用SQL DDL语句或使用关系设计器来定义它们。这些工具的使用受到限制,但是它们服务的目的很难与其他数据库对象一起复制。这些工具有两个主要用途。

  • 提供数据库的声明性模型以及数据如何相互关联。一个自我记录工具。
  • 确保您不会在代码中错误地做一些愚蠢的事情来违反您的模型。如果您的模型是正确的,则代码中的错误表示您的编程逻辑存在缺陷。如果在编程逻辑中遇到错误,请验证模型是否正确。
可以被多个应用程序和接口调用5(它只是在幕后发生。没有应用程序可以逃脱它们)
数据库内的可重用性5-是的-无论您在何处进行更新,插入,在禁用它们之后,它们都无法摆脱关键约束和级联更新/删除规则的铁腕。
可用于更改表中的数据,而无需授予用户直接更改表的权限。4确实仅适用于级联更新/删除规则是-级联更新/删除规则是一种特殊的触发器,可以说是在可能违反潜在的参照完整性约束的情况下踢进来的。例如,如果您更新一个键字段,则对外键进行级联更新将强制对外键字段进行更新以纠正这种情况,因此您不会得到孤立的数据。

动态生成的SQL:

使用动态生成的sql与仅使用存储过程,视图等的利弊

可以接受不确定数量的参数5(您可以从表中选择列和行的子集,更改要读取的表等)
可用于更改表中的数据,而无需授予用户直接更改表的权限。4您可以让应用程序控制安全性,因此从某种意义上说,应用程序只需要拥有权限
给定不同的参数可以返回不同数量的字段。5 –(您可以选择列和行的子集,进行复杂的联接)。您可以更改基础结构,例如从不同的表集中返回记录。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guangod

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

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

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

打赏作者

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

抵扣说明:

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

余额充值