视图(非具体化)的处理方式是将查询存储在数据库上,并在调用该视图时执行它。
准备好的语句也以相同的方式处理,但它们绑定到特定的连接,而视图是全局可访问的。
所以我的问题是:
准备好的语句和视图除了将名称与 SQL 语句相关联之外没有任何共同点。
准备好的陈述有两个目的:
它允许数据库缓存执行计划,这样你就不必每次执行时都计划一个频繁的语句。这是一个性能特征。
它允许将语句与其参数分开,从而防止 SQL 注入。这是一项安全功能。
视图不提供上述功能。视图的特点是:
视图避免在许多 SQL 语句中重复相同的子查询。这是为了代码重用。
视图提供数据的抽象接口。如果基础表被重构,您只需更改视图,而使用视图的查询不必更改。这对于从数据中进行抽象很有用。
视图允许用户访问其他表中不允许他们访问的某些部分。这是一项安全功能,需要您设置
security_barrier
选项。
所以你看,他们没有什么共同点。
是基于表的命名查询。
只能有SELECT语句或VALUES语句,所以不能有其他语句,如
INSERT
、UPDATE
、DELETE
等,否则会出错。
只能有单个 SQL 查询。
可以通过SELECT
语句的
FROM子句来调用。
可以与
INSERT
、UPDATE
或DELETE
语句一起使用来更改其基表的内容。
不能有零个或多个 SQL 查询,否则会出错。
*我的帖子详细解释了一个视图。
可以创建一个准备好的语句(SQL 查询),以便稍后使用 EXECUTE 语句运行它。 *由
PREPARE
语句创建的准备好的SQL查询在注销后将被删除。
可以有零个或多个仅类型参数。
可以具有纯类型参数的别名,例如
$1
、$2
等
不能有多个语句(SQL查询),否则会出错。
不能有命名参数,例如
num1 INT
、num2 INT
等,否则会出错。
*我的帖子详细解释了
PREPARE
声明。