SQL视图

时间:2020-02-23 14:32:37  来源:igfitidea点击:

在本文中,我们将重点介绍SQL视图。

什么是SQL视图?

在SQL中,可以将View视为对数据库的一种受限访问方式。
SQL视图允许将视图访问限制为一组用户对一组特定数据的访问。
您可以使用一个或者多个表和列中的有限数量的数据创建视图。

需要SQL视图

视图可帮助数据库管理员向其他用户/雇员提供对数据库表的受限访问。

例如,考虑一个的登录数据库,其中包含" User_id"," Password"," Phone_num"和" Name"等数据列。
万一数据库管理员碰巧提供对系统测试人员(雇员)的访问权限,则可以通过SQL视图为用户提供受限/受限访问权限。
他可以仅提供对"名称"和"用户ID"等数据列的访问来限制数据库访问。

因此,SQL视图有助于通过各种受限参数来调整机密数据访问。

创建一个SQL视图

通过创建视图,我们确定了提供对原始数据库的访问的限制。

语法:

CREATE VIEW View_name AS
SELECT columns
FROM  Table;

我们在" SELECT语句"旁边使用"视图"来选择要对用户可见的数据列。

我们已经创建了一个表(使用上一教程中有关SQL求和,平均值和计数函数的数据)–"信息",如下所示,其中包含" id"," Cost"," city"和" Password"数据列。

id      Cost    city    Password
1	100	Pune	11**&!
2	50	Satara	1234$
3	65	Pune	qwerty123@
4	97	Mumbai	JAM1998#
5	12	USA	0000%!

创建表后,让我们开始在数据库上创建View。

范例1:

CREATE VIEW Info_review AS
SELECT cost, city
FROM  Info;

SELECT * from Info_review;

我们通过使用SELECT语句提供对"费用"和"城市"列数据的访问,从而在表格上创建了一个名为"信息查看"的视图-"信息"。

输出:

100	Pune
50	Satara
65	Pune
97	Mumbai
12	USA

范例2:

CREATE VIEW Info_review AS
SELECT cost, city
FROM  Info
WHERE city = "Pune";
SELECT * from Info_review;

在此示例中,我们通过限制访问权限来使用" SELECT语句"和" WHERE子句"创建了一个SQL视图,以便仅提供属于城市"浦那"的那些数据值。

输出:

100	Pune
65	Pune

更新SQL视图

视图中的更新意味着更新或者操作数据库中的预定义记录。

我们需要遵循以下条件才能更新视图的数据:

  • 不能将SQL SELECT语句与DISTINCT关键字和ORDER BY子句一起使用。

  • SQL SELECT语句不应包含集合运算符,集合函数和摘要函数。

  • View查询不应与HAVING和GROUP BY子句一起使用。

  • 该查询不应使用" FROM子句"从多个列中获取数据。

  • SQL View应该包含原始数据库的所有"非空值"。

语法:

UPDATE View-name
 SET column="value"
 WHERE condition;

例:

CREATE VIEW Info_review AS
SELECT id, city
FROM  Info;

UPDATE Info_review
 SET city="Satara"
 WHERE id = 1;

SELECT * from Info_review;

在上面的示例中,我们更新了ID = 1的城市值。

输出:

1	Satara
2	Satara
3	Pune
4	Mumbai
5	USA

一旦在视图中进行了更新,它就会立即反映在原始数据库的表中。

SELECT * from Info;

如果执行上面的SELECT语句,我们可以看到在id = 1的视图中进行的更新反映在原始表"信息"中。

1	100	Satara	11**&!
2	50	Satara	1234$
3	65	Pune	qwerty123@
4	97	Mumbai	JAM1998#
5	12	USA	0000%!

从SQL视图删除行

可以使用以下命令从SQL View删除数据行:

DELETE FROM View-name
 WHERE column= "value";

例:

create table Info(id integer, Cost integer, city varchar(200),Password varchar(200));
insert into Info(id, Cost,city,Password) values(1, 100,"Pune","11**&!");
insert into Info(id, Cost,city,Password) values(2, 50, "Satara","1234$");
insert into Info(id, Cost,city,Password) values(3, 65,"Pune","qwerty123@");
insert into Info(id, Cost,city,Password) values(4, 97,"Mumbai","JAM1998#");
insert into Info(id, Cost,city,Password) values(5, 12,"USA","0000%!");

CREATE VIEW Info_review AS
SELECT id, city
FROM  Info;

DELETE FROM Info_review
 WHERE city = "USA";

SELECT * from Info_review;

输出:

1	Pune
2	Satara
3	Pune
4	Mumbai

在视图中所做的更改将反映在原始表中,如下所示。

SELECT * from Info;

1	100	Pune	11**&!
2	50	Satara	1234$
3	65	Pune	qwerty123@
4	97	Mumbai	JAM1998#

您可能会注意到,视图和原始表中都不再包含USA的行。

在SQL视图中插入一行

在SQL视图中插入数据行应遵循"更新视图"部分中提到的所有条件。

语法:

INSERT into View-name(columns) values(val1,..,valN)

例:

INSERT into Info_review(id,city) values(12,'France');

SELECT * from Info_review;

输出:

1	Pune
2	Satara
3	Pune
4	Mumbai
5	USA
12	France

SQL视图中所做的所有更改都反映在原始表中,如下所示。

SELECT * from Info;

1	100	Pune	11**&!
2	50	Satara	1234$
3	65	Pune	qwerty123@
4	97	Mumbai	JAM1998#
5	12	USA	0000%!
12	NULL	France	NULL

删除SQL视图

如果我们希望删除整个View以及数据及其架构,则需要使用Drop语句。

Drop statement会从内存中删除整个View及其结构(模式)。

语法:

DROP VIEW View-name;

例:

DROP VIEW Info_review;

删除视图后,我们可以使用下面的SELECT语句来验证其删除。

Select * from Info_review;

输出:

ERROR 1146 (42S02) at line 15: Table 'test.Info_review' doesn't exist