在mySQL中,我经常在创建视图和创建没有任何参数的存储过程之间犹豫不决。
除了过程可以返回多个输出表之外,视图和零参数过程之间有什么概念上的区别?
假设我们想要获取的输出只包含一个表,那么在使用视图和使用没有参数的存储过程之间是否存在性能差异,是否存在可以执行的操作而另一个不能执行的操作?
答案 0 :(得分:1)
有许多不同之处。它们用于不同的事情。这里有一些例子,但这绝不是一个完整的清单。
您可以在SELECT查询中使用视图,在其结果上应用SQL条件和投影。您甚至可以将视图加入其他表,就像表一样。
您可以使用视图 - 如果它是可更新的视图 - 作为INSERT,UPDATE,DELETE等其他SQL语句的主题。
您无法将视图定义为SELECT查询以外的任何内容。您可以在过程中添加各种不同的语句类型。
您可以在存储过程中编写代码块来执行大量条件逻辑,执行插入和查询等操作。
您可以在存储过程中使用PREPARE和EXECUTE在运行时构建动态SQL语句。因此,您可以执行需要运行时解析的操作,例如数据透视表查询。
您可以在存储过程中使用DDL。
您可以在一个过程中启动和提交一个或多个事务。
第一次在会话中使用过程时会编译一个过程,每个会话都必须重新编译它。而视图在创建时会被“编译”一次。
过程可以读取或设置会话变量,但视图不能。