数据库考点之存储过程及其他操作使用场景
如题:2019年10月
注:先要明白概念:
存储过程:实质上就是就是存储在数据库中的一段代码,可以看作是mysql批处理。
存储函数:实质就是存储过程,只不过有自己固定的特性。书中也给出了和存储过程的区别:
到这里就很明显了,考点就是区别这里,答案,选A.
扩展:存储过程与函数,可以看作是面向对象中的对象方法。它的重要特点就是“存储”,要不要存储,何时需要存储呢??下面只给出最适合的场景:
存储过程
存储过程是在数据库中封装数据库逻辑的众多机制之一。它们与常规编程语言过程相似,因为它们接受参数,执行某些操作,有时返回结果,有时甚至更改将参数声明为输出参数时所采用的参数值。您会发现它们与存储函数非常相似,因为它们可以返回数据。但是,存储过程不能在查询中使用。由于存储过程具有接受声明为OUTPUT的参数的机制,因此从理论上讲,它们可以返回多个输出。
较长的SQL易于阅读和维护 | 5(存储过程的一大优势是,您可以拥有很长的sql语句事务和条件循环,这些事务可以一次全部提交或作为一个单元回滚。这也节省了网络流量。 |
可用于更改表中的数据,而无需授予用户直接更改表的权限 | 4通常,对于大多数支持它们的DBMS都是如此。 |
可以被多个应用程序和接口调用 | 4(通常可以调用它们,但是并不总是可以使用OUTPUT参数) |
存储的功能(存储函数)
存储功能与存储过程非常相似,除了3种主要方式。
- 与存储过程不同,它们可以在视图,存储过程和其他存储函数中使用。
- 在许多数据库中,禁止它们更改数据或具有ddl / dml限制。请注意,对于诸如PostGreSQL之类的数据库,这是不正确的,因为存储函数和存储过程之间的界线非常灰
- 它们通常不能采用输出参数(占位符),然后将其与更改后的值一起传回。
可以被多个应用程序和接口调用 | 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 –(您可以选择列和行的子集,进行复杂的联接)。您可以更改基础结构,例如从不同的表集中返回记录。 |