SQL视图
在本文中,我们将重点介绍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