快速教程

MySQL手记: 视图的使用

很多时候不少人像我一样不明白既然有了强大的表查询工具视图就没有用处了。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图是存储在数据库中的查询的 SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

视图本质上还是一个基本表,创建一个视图就像创建一个表一样:

CREATE VIEW DS_VIEW AS SELECT * FROM Departments;

DS_VIEW是视图的名称。以下又是另外一个例子:

CREATE VIEW Employee_view(EmployeeID, Name,RealIncome) AS SELECT Employees, EmployeeID, Name, Income-Outcome FROM Employees, Salary WHERE Employees.EmployeeID=Salary.EmployeeID WITH CHECK OPTION;

WITH CHECK POINT 的意思就是要在更新视图时要符合创建视图所设定的条件。CREATE VIEW 还有一个 ALGORITHM 子句,此子句是 MySQL 对 SQL 标准的扩展,规定了MySQL的算法,而算法影响 MySQL 处理视图的方式。默认是 UNDEFINED。若是 MERGE,视图的行需要和基表的行一一对应。ALGORITHM=TEMPTABLE 则是视图置于临时表之上。。

查询视图,则和查询表一样使用SELECT语句:

SELECT DepartmentName FROM DS_VIEW WHERE Department='3';

更新视图也是 INSERT 和 UPDATE,删除数据显然少不了 DELETE:

INSERT INTO DS_VIEW VALUE('6','广告部','广告业务');
UPDATE DS_VIEW SET DepartmentName='生产车间' WHERE DepartmentID='5';
DELETE FROM DS_VIEW WHERE DepartmentID='1';

最后就是删除视图,就一个语句可以了:

DROP VIEW DS_VIEW;
Tags: , ,

No comments


Leave a Comment