1.什么是视图
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
2.为什么要使用视图
- 简化用户对数据的理解,以及简化他们的操作。通过定义视图,可以将经常使用的查询定义为视图,这样用户不必每次都指定全部的条件,只需要select * from view1就可以。
- 提高数据安全性。视图是虚拟的,物理上是不存在的,只是存储了数据的集合。同时,用户对视图不可以随意的更改和删除,可以保证数据的安全性。
- 逻辑数据独立性。视图可以帮助用户屏蔽真实表结构变化带来的影响。
3.视图的特点
- 简单:使用视图时,用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。
- 安全:视图的使用限制了用户只能访问他们被允许查询的结果集,对于表的权限管理并不能限制到某个行或者某个列,但通过视图就可以简单的实现。
- 数据独立:一旦视图的结构被确定了,可以屏蔽表结构变化对用户的影响。例如源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
4.视图的语法
4.1创建视图
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
其中,view_name是视图的名称,column1, column2, …是要选择的列名,table_name是要从中选择数据的表名,condition是筛选条件。
例如,创建一个名为view1的视图,选择table1表中的column1和column2列,并筛选出column1值大于等于10的数据,可以使用以下语句:
CREATE VIEW view1 AS
SELECT column1, column2
FROM table1
WHERE column1 >= 10;
创建视图后,可以通过以下语句查看视图中的数据:
SELECT * FROM view1;
这将返回视图view1中的所有行。
4.2在视图上执行DML操作
在视图上执行DML操作与在普通表上执行DML操作类似,可以使用INSERT、UPDATE、DELETE等语句对视图进行操作。但是需要注意的是,视图本身并不存储实际的数据,而是基于其定义的查询语句从源表中选择数据。因此,对视图执行DML操作实际上是对源表执行相应的操作。
以下是在视图上执行DML操作的示例:
SELECT操作
要查询视图中的数据,可以使用SELECT语句。例如,如果要查询名为“view1”的视图中所有列的数据,可以使用以下语句:
SELECT * FROM view1;
这将返回视图“view1”中的所有行和所有列的数据。如果只想查询特定的列,可以在SELECT语句中列出这些列的名称,例如:
SELECT column1, column2 FROM view1;
这将返回视图“view1”中所有行中指定的列的数据。如果需要在查询中使用条件来筛选数据,可以在WHERE子句中添加条件,例如:
SELECT * FROM view1 WHERE column1 > 10;
这将返回视图“view1”中满足条件的行和所有列的数据。
INSERT操作
向视图中插入数据实际上是将数据插入到源表中。例如,向名为view1的视图中插入一条记录,可以使用以下语句:
INSERT INTO view1 (column1, column2) VALUES (value1, value2);
这将在名为view1的视图的源表中插入一条记录,其中column1的值为value1,column2的值为value2。
UPDATE操作
更新视图中数据的实际操作是更新源表中的数据。例如,更新名为view1的视图中column1列的值,可以使用以下语句:
UPDATE view1 SET column1 = new_value WHERE condition;
这将在名为view1的视图的源表中更新满足条件的数据行中的column1列的值为new_value。
DELETE操作
从视图中删除数据的实际操作是删除源表中的数据。例如,从名为view1的视图中删除满足条件的数据行,可以使用以下语句:
DELETE FROM view1 WHERE condition;
这将在名为view1的视图的源表中删除满足条件的数据行。
需要注意的是,对视图执行DML操作时,如果视图定义中包含WHERE子句或其他筛选条件,则必须满足这些条件才能对源表执行相应的操作。此外,如果视图是基于多个表连接或其他复杂查询定义的,则需要注意DML操作对源表之间数据一致性和完整性的影响。
4.3视图实例
下面是一个关于员工信息的视图实例:
- 首先,假设我们有一个名为 “employees” 的表,其中包含以下字段:员工 ID(employee_id)、姓名(name)、年龄(age)、部门(department)。
- 创建一个视图,名为 “active_employees”,用于查询在职员工的信息。视图的 SQL 语句如下:
CREATE OR REPLACE VIEW active_employees AS
SELECT employee_id, name, age, department
FROM employees
WHERE status = 'ACTIVE';
在这个视图中,我们筛选了 “employees” 表中状态为 “ACTIVE” 的员工,将其呈现为在职员工的信息。
3. 接下来,为了提高数据安全性,我们只允许特定用户查询 “active_employees” 视图。首先,创建一个具有较高权限的用户,例如:文章来源:https://www.toymoban.com/news/detail-737094.html
CREATE USER manager IDENTIFIED BY manager_password;
然后,授权该用户具有创建、查询、更新和删除 “active_employees” 视图的权限:文章来源地址https://www.toymoban.com/news/detail-737094.html
GRANT CREATE, SELECT, UPDATE, DELETE ON active_employees TO manager;
- 最后,其他用户可以通过查询 “active_employees” 视图来获取在职员工的信息,而无需直接查询 “employees” 表。这样,我们既提高了数据安全性,又简化了查询过程。
注意:在实际应用中,视图的使用需谨慎,因为视图的数据与对应表数据互相关联。在操作视图时,务必确保了解相关表的结构和数据,以免造成错误或丢失数据。同时,为了优化查询性能,可以考虑使用同义词来进一步简化查询过程。
到了这里,关于数据库强化(1.视图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!