什么是视图:是从一个或多个表中导出来的表,它是一种虚拟存在的表,表的结构和数据都依赖于基本表。
视图的优点
-
简化查询语句:简化用户的查询操作,使查询更加快捷。
-
安全性:更方便的进行权限控制。
-
逻辑数据独立性:屏蔽真实表结构变化带来的影响。
2.创建视图
在默认情况下,新创建的视图保存在当前选择的数据库中。
若要明确指定在某个数据库中创建视图,在创建时应将名称指定为“数据库名.视图名”。
在SHOW TBLES的查询结果中会包含已经创建的视图。
视图创建后,MySQL就会在数据库目录中创建一个“视图名.frm”文件。
准备数据:
1 CREATE DATABASE mahaiwuji; 2 USE mahaiwuji; 3 4 CREATE TABLE grade( 5 id INT(4) PRIMARY KEY, 6 name VARCHAR(36) 7 ) ENGINE = INNODB DEFAULT CHARSET = utf8; 8 9 INSERT INTO grade VALUES(1,‘一班‘); 10 INSERT INTO grade VALUES(2,‘二班‘); 11 12 CREATE TABLE student( 13 sid INT(4) PRIMARY KEY, 14 sname VARCHAR(36), 15 gid INT(4) NOT NULL 16 ) ENGINE = INNODB DEFAULT CHARSET = utf8; 17 18 INSERT INTO student VALUES (1,‘码海无际1‘,1); 19 INSERT INTO student VALUES (2,‘码海无际2‘,2); 20 INSERT INTO student VALUES (3,‘码海无际3‘,2); 21 INSERT INTO student VALUES (4,‘码海无际4‘,2); 22 INSERT INTO student VALUES (5,‘码海无际5‘,1); 23 INSERT INTO student VALUES (6,‘码海无际6‘,1); 24 INSERT INTO student VALUES (7,‘码海无际7‘,1); 25 INSERT INTO student VALUES (8,‘码海无际8‘,2);
查询数据
1 SELECT sid,sname,gid FROM student LIMIT 3;
1 CREATE VIEW view_student AS 2 SELECT sid,sname,gid FROM student LIMIT 3; 3 -- 等价于 4 CREATE VIEW view_student AS 5 SELECT * FROM student LIMIT 3;
查询视图
1 SELECT * FROM view_student;
删除视图(DROP VIEW 视图名)
1 DROP VIEW view_student;
在创建视图的SELECT语句中移除LIMIT子句
1 CREATE VIEW view_student AS 2 SELECT * FROM student;
在查询视图时使用LIMIT子句
1 SELECT * FROM view_student LIMIT 3;
自定义列名称
1 CREATE VIEW view_student_promo (id,name,gid) AS 2 SELECT sid,sname,gid FROM student;
查询视图
1 SELECT * FROM view_student_promo WHERE id <= 3;
在创建视图时,自定义列名称的顺序与AS后SELECT字段列表的顺序一致。
自定义列名称的数量必须与SELECT字段列表的数量一致。
多表操作
1 CREATE VIEW view_student_grade (sid,sname,gname) AS 2 SELECT sid,sname,g.name FROM student s 3 LEFT JOIN grade g ON s.gid=g.id;
查询视图
1 SELECT * FROM view_student_grade;
3.修改视图
修改视图:修改数据库中存在的视图的定义。
例如,当基本表中的某些字段发生变化时,视图必须修改才能正常使用。
修改已有视图
1 CREATE OR REPLACE VIEW view_student AS 2 SELECT sid,sname FROM student;
查询视图
1 SELECT * FROM view_student;
使用ALTER VIEW修改视图
1 ALTER VIEW view_student AS 2 SELECT sname FROM student;
查询视图
1 SELECT * FROM view_student;
4.删除视图
语法
1 DROP VIEW [IF EXISTS] view_name [, view_name1] …
使用
1 DROP VIEW view_student;
删除多个
1 DROP VIEW view_student_grade,view_student_promo;
5.视图数据操作
创建视图
1 CREATE VIEW view_student AS 2 SELECT * FROM student;
插入数据
1 INSERT INTO view_student VALUES (9,‘码海无际9‘,1);
如果遇到如下情况,操作可能会失败:
-
操作的视图定义在多个表上。
-
没有满足视图的基本表对字段的约束条件。
-
在定义视图的SELECT语句后的字段列表中使用了数学表达式或聚合函数。
-
在定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING子句。
修改数据
1 UPDATE view_student SET gid=2 WHERE sid=9;
删除数据
1 DELETE FROM view_student WHERE sid=9;