概念:
- 视图(view)是一个虚拟表,并非真实存在,其本质是跟去SQL语句获取动态的数据集,并为其明明,用户使用时秩序使用视图名称即可获取结果集,并可以将其当做表来使用。
- 数据库只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。
- 使用视图查询数据时,数据库系统会从原来的表中去除对应的数据。因此,视图中的数据时依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
作用:
- 简化代码,可以吧重复使用的查询封装成视图重复使用,同时可以使复杂的查询易于理解和使用。
- 安全原因,如果一张表中有很多数据,很多信息不希望让所有人看到,此时可以使用视图,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,可以对不同的用户没设定不同的视图。
方法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} ]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED |LOCAL] CHECK OPTION]
注:
(1)algorithm:可选项,表示视图选择的算法。
(2)view_name:表示要创建的视图名称。
(3)column_list:可选项,指定视图中各个属性的名称,默认情况下与SELECT语句中的查询的属性相同。
(4)selcet_statement:表示一个完整的查询语句,将查询记录导入视图中。
(5)[with [cascaded |local ] check option]:可选项,表示更新视图时要保证在该视图的权限范围之内。
例如:
先创建表和数据
CREATE TABLE dept (
deptno int NOT NULL,
dname varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
loc varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO dept VALUES (10, '教研部', '北京');
INSERT INTO dept VALUES (20, '学工部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '武汉');
CREATE TABLE emp (
empno int NOT NULL,
ename varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
job varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
mgr int NULL DEFAULT NULL,
hiredate date NULL DEFAULT NULL,
sal decimal(7, 2) NULL DEFAULT NULL,
COMM decimal(7, 2) NULL DEFAULT NULL,
deptno int NULL DEFAULT NULL,
PRIMARY KEY (empno) USING BTREE,
INDEX fk_emp(mgr) USING BTREE,
CONSTRAINT fk_emp FOREIGN KEY (mgr) REFERENCES emp (empn