将数据库的查询结果作为一个数据库对象定义出来,就叫做视图。
视图内其实并没有存储任何数据,它指示对表的一个查询
例如经常要对 emp 和 dept表进行连接查询,每次都要做表的连接,写同样的一串语句,同时由于工资列队数据比较敏感,对外要求不可见。对这样的问题就可以通过视图来解决。
CREATE [OR REPLACE] VIEW 视图名
[(alias[, alias]...)]--为视图字段指定别名
AS subquery
[WITH READ ONLY];
创建视图, EMP_V_10, 包括10号部门的所有雇员信息.
CREATE VIEW emp_v_10
AS SELECT employee_id, name, salary
FROM employees
WHERE deptt_id = 10;
1. 视图必须有唯一命名2. 在 mysql 中视图的数量没有限制3. 创建视图必须从管理员那里获得必要的权限4. 视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图5. 在视图中可以使用 OREDR BY ,但是如果视图内已经使用该排序子句,则视图的 ORDER BY 将覆盖前面的 ORDER BY。6. 视图不能索引,也不能关联触发器或默认值7. 视图可以和表同时使用
使用CREATE OR REPLACE VIEW 语句修改EMP_V_10 视图. 为每个列指定列名。
CREATE OR REPLACE VIEW emp_v_10
(id, name, sal, dept_id)
AS SELECT id,name,
salary, dept_id
FROM employees
WHERE dept_id = 10;
在CREATE VIEW 语句中字段与子查询中的字段必须一一对应,否则就别指定别名,或在子查询中指定别名
使用ALTER VIEW 语句修改EMP_V_10 视图. 为每个列指定列名.
ALTER VIEW emp_v_10
(id, name, sal, dept_id)
AS SELECT id,name,
salary, dept_id
FROM employees
WHERE dept_id = 10;
在CREATE VIEW 语句中字段与子查询中的字段必须一一对应,否则就别指定别名,或在子查询中指定别名
创建复杂视图,创建一个从两个表中查询数据,并进行分组计算的复杂视图.
CREATE VIEW dept_sum_vu_10
(name, minsal, maxsal, avgsal)
AS SELECT d.name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM employees e, departments d
WHERE e.dept_id = d. id
AND e.dept_id = 10;
删掉视图不会导致数据的丢失,因为视图是基于数据库的表之上的一个查询定义 .
- DROP VIEW view_name;
1.在数据库example下创建college表。College表内容如下所示
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
number 学号 INT(10) 是 否 是 是 否
name 姓名 VARCHAR(20) 否 否 是 否 否
major 专业 VARCHAR(20) 否 否 是 否 否
age 年龄 INT(5) 否 否 否 否 否
CREATE TABLE college(
number INT(10) NOT NULL UNIQUE PRIMARY KEY COMMENT '学号',
name VARCHAR(20) NOT NULL COMMENT '姓名',
major VARCHAR(20) NOT NULL COMMENT '专业',
age INT(5) COMMENT '年龄'
);
2.在student表上创建视图college_view。视图的字段包括student_num、student_name、
student_age和department。ALGORITHM设置为MERGE类型,并且为视图加上WITH LOCAL CHECK OPTION条件
CREATE ALGORITH=MERGE VIEW
college_view(student_num,student_name,student_age,department)
AS SELECT number,name,age,major FROM college
WITH LOCAL CHECK OPTION;
3. 查看视图 college_view 的详细结构
- SHOW CREATE VIEW college_view \G
4. 更新视图。向视图中插入 3 条记录。记录内容如下表所示umer name major age0901 张三 外语 200902 李四 计算机 220903 王五 计算机 19
INSERT INTO college_view VALUES(0901,'张三',20,'外语');
INSERT INTO college_view VALUES(0902,'李四',22,'计算机');
INSERT INTO college_view VALUES(0903,'王五',19,'计算机');
5.修改视图,使其显示专业为计算机的信息,其他条件不变
方法一:
CREATE OR REPLACE ALGORITHM=UNDEFINED VIEW
college_view(student_num,student_name,student_age,department)
AS SELECT number,name,age,major
FROM college WHERE major=’计算机’
WITH LOCAL CHECK OPTION;
方法二:
ALTER ALGORITHM=UNDEFINED VIEW
college_view(student_num,student_name,student_age,department)
AS SELECT number,name,age,major
FROM college WHERE major=’计算机’
WITH LOCAL CHECK OPTION;