33.MySQL中的视图

1.简介

什么是视图:是从一个或多个表中导出来的表,它是一种虚拟存在的表,表的结构和数据都依赖于基本表。

视图的优点

  1. 简化查询语句:简化用户的查询操作,使查询更加快捷。

  2. 安全性:更方便的进行权限控制。

  3. 逻辑数据独立性:屏蔽真实表结构变化带来的影响。

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;

创建view_student视图(CREATE VIEW 视图名 AS SELECT语句)

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);

如果遇到如下情况,操作可能会失败:

  1. 操作的视图定义在多个表上。

  2. 没有满足视图的基本表对字段的约束条件。

  3. 在定义视图的SELECT语句后的字段列表中使用了数学表达式或聚合函数。

  4. 在定义视图的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;

 

33.MySQL中的视图

上一篇:MySQL MyISAM/InnoDB高并发优化经验


下一篇:java – 无法在spock中的null对象上调用方法leftshift()