在本文中,我们将简要讨论SQL中的视图,以及初学者需要了解的关于视图的一切。让我们直接开始吧。
什么是视图?
简单来说,视图是通过定义查询创建的虚拟表,根据查询的不同,查询可能包含一个或多个表。视图类似于表,但不是实际的表。视图存储表的结构并从表中提取数据,而表包含数据库中的行和列数据。
让我们看看从单个表创建视图的语法:
在上面的代码中,我们从满足某些条件的表products\u info中创建了一个名为“u product”的视图。
每次我们调用一个视图时,用于生成该视图的底层查询实际上都会被调用。
让我们看一下以下示例,以了解如何从多个表中创建视图:
在上面的查询中,使用基于多个表的连接的非常复杂的查询创建了视图“client”summary。
使用视图的优点:
让我们讨论视图的几个优点,这些优点使它们成为SQL中的热门话题。
1.视图可以节省我们的时间,想象一下,如果你更频繁地运行一个复杂的查询,那么一次又一次地编写这么长的查询会变得非常繁忙。我们可以通过简单地为该查询创建一个视图并调用该视图而不是再次编写查询来解决这个问题。当我们调用视图时,实际上我们调用了视图的底层查询,但它更简单。
2、视图给了我们一层安全感。通过一个例子来理解这一点——假设您必须与供应商或当前与您合作项目的人员共享客户数据的一部分,但您的数据包含一些有关客户的关键信息,您不希望组织外的任何人访问此类机密信息。在这种情况下,您可以创建一个视图,其中只包含您希望与其他人共享的数据,这样您就可以阻止其他人访问整个数据。
以下是如何在MySQL中创建角色:
当数据库中有许多用户时,SQL角色在授予和撤消用户权限方面很有用。换句话说,组织或公司决定必须向哪个用户授予哪些特权。
什么是“创建或替换视图”?
_创建视图用于创建视图,正如我们在上面的代码段中所看到的那样,但**create or replace view_与createview_**略有不同。区别在于:
假设我们创建了一个视图,但由于某些要求,我们希望在视图中获得更多信息,或者我们想在视图中进行更改,因此,我们需要返回到我们为创建视图而编写的查询并对其进行更改,但是,如果我们使用create view\u创建视图,我们无法进行必要的更改,因为它会引发错误Table Table \u name已经存在。\u因此,为了让您提出这个小更改,您必须删除整个视图,从头开始创建一个视图。
这里是u create or replace view**发挥作用的地方。首先,以下是如何使用create or replace view创建视图:_**
现在,如果我们想对视图进行任何更改,我们可以重新运行查询,如果视图尚未创建,它将为我们创建一个视图,如果视图已经创建,它会用我们分配给它的查询替换该视图。
但是,在使用**create or replace view\时,有几点值得记住:
1、它不能更改列名,因此您需要使用“Alter view view”命令。
2、无法更改数据类型。
3.无法在现有列之间插入新列,如果要添加新列,请在最后添加。
什么是可更新视图?
当我们可以使用update命令更新视图,并且更改反映回原始表中时,此类视图称为可更新视图。但在更新视图之前,有几点值得记住:
1.使用单个表创建视图时,可以更新视图。
2. 当我们在查询中使用distinct子句group by和partition by时,无法更新视图。
3. 在多个表上创建视图时,无法更新视图。以下是一些用于更新视图的代码片段:
带复选选项:
有一个问题摆在你们面前:
您希望将数据访问权限授予您的供应商,他可以在视图中以他希望的方式进行更改,而这些更改反过来会反映在原始表中,因此您希望对他所做的更改进行网关保护。例如,您希望仅当满足某些条件时才允许他进行更改。下面是带有复选选项的u。
通过以下查询了解:
在这里,用户只能在满足where条件时进行更改。
以下是可以在视图上执行的一些操作:
_结论:这是对视图的简要介绍,添加了更多类似的视图类型,并对本文未涵盖的视图进行了修改。希望本文能为您提供一些关于什么是视图以及如何使用它们的见解。非常感谢。