视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
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中的所有行。
在视图上执行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操作对源表之间数据一致性和完整性的影响。
下面是一个关于员工信息的视图实例:
CREATE OR REPLACE VIEW active_employees AS
SELECT employee_id, name, age, department
FROM employees
WHERE status = 'ACTIVE';
在这个视图中,我们筛选了 “employees” 表中状态为 “ACTIVE” 的员工,将其呈现为在职员工的信息。
3. 接下来,为了提高数据安全性,我们只允许特定用户查询 “active_employees” 视图。首先,创建一个具有较高权限的用户,例如:
CREATE USER manager IDENTIFIED BY manager_password;
然后,授权该用户具有创建、查询、更新和删除 “active_employees” 视图的权限:
GRANT CREATE, SELECT, UPDATE, DELETE ON active_employees TO manager;