视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表一样使用视图进行查询、更新和管理。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。
-- 语法
create view vew_name [(column_list)] as select_statement;
- create view:创建视图的关键字
- view_name:视图名
- [(column_list)]:视图中包含的列
- select_statement:视图所依赖的查询语句
mysql> create view v_student_score as (
-> select
-> s.id,
-> s.`name`,
-> s.sno,
-> s.age,
-> s.enroll_date,
-> cls.`name`,
-> c.`name`,
-> sco.score
-> from
-> student s,
-> class cls,
-> score sco,
-> course c
-> where
-> s.class_id = cls.id
-> AND
-> sco.student_id = s.id
-> AND
-> sco.course_id = c.id
-> order by s.id asc
-> );
ERROR 1060 (42S21): Duplicate column name 'name'
s.name、cls.name、c.name这三个列的名字重复了,需要为重名的列起别名。
mysql> create view v_student_score as (
-> select
-> s.id,
-> s.`name`,
-> s.sno,
-> s.age,
-> s.enroll_date,
-> cls.`name` as class_name,
-> c.`name` as course_name,
-> sco.score
-> from
-> student s,
-> class cls,
-> score sco,
-> course c
-> where
-> s.class_id = cls.id
-> AND
-> sco.student_id = s.id
-> AND
-> sco.course_id = c.id
-> order by s.id asc
-> );
Query OK, 0 rows affected (0.02 sec)
由于在创建视图时没有指定视图包含的列,默认会以查询结果中返回的列作为视图的列。
-- 创建的视图可以直接在表中找到
mysql> show tables;
+-------------------+
| Tables_in_java114 |
+-------------------+
| class |
| course |
| emp |
| exam |
| score |
| student |
| student1 |
| t_recored |
| t_recored_new |
| t_recored_new2 |
| t_truncate |
| users |
| v_student_score |
+-------------------+
13 rows in set (0.00 sec)
-- 可以直接使用视图查询
mysql> select * from v_student_score;
+----+--------+--------+------+-------------+------------+-------------+-------+
| id | name | sno | age | enroll_date | class_name | course_name | score |
+----+--------+--------+------+-------------+------------+-------------+-------+
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 70.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 33 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 数据结构 | 98 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 70.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 59.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | Java | 33 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | MySQL | 68 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 99 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | Java | 67 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | MySQL | 23 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 56 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 数据结构 | 72 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | Java | 81 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | 计算机网络 | 37 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | C++ | 56 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 操作系统 | 43 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 数据结构 | 79 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | C++ | 80 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | 数据结构 | 92 |
+----+--------+--------+------+-------------+------------+-------------+-------+
23 rows in set (0.00 sec)
-- 查看视图结构
mysql> desc v_student_score;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id | bigint | NO | | 0 | |
| name | varchar(20) | NO | | NULL | |
| sno | varchar(10) | NO | | NULL | |
| age | int | YES | | NULL | |
| enroll_date | date | YES | | NULL | |
| class_name | varchar(20) | NO | | NULL | |
| course_name | varchar(20) | NO | | NULL | |
| score | float | NO | | NULL | |
+-------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
--查看视图的创建语句
mysql> show create view v_student_score;
+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View | character_set_client | collation_connection |
+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| v_student_score | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_student_score` AS select `s`.`id` AS `id`,`s`.`name` AS `name`,`s`.`sno` AS `sno`,`s`.`age` AS `age`,`s`.`enroll_date` AS `enroll_date`,`cls`.`name` AS `class_name`,`c`.`name` AS `course_name`,`sco`.`score` AS `score` from (((`student` `s` join `class` `cls`) join `score` `sco`) join `course` `c`) where ((`s`.`class_id` = `cls`.`id`) and (`sco`.`student_id` = `s`.`id`) and (`sco`.`course_id` = `c`.`id`)) order by `s`.`id` | gbk | gbk_chinese_ci |
+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)
定义视图的好处:
- 隐藏敏感字段。
- 对外提供统一访问规范
mysql> select * from student;
+----+----------+--------+------+--------+-------------+----------+
| id | name | sno | age | gender | enroll_date | class_id |
+----+----------+--------+------+--------+-------------+----------+
| 1 | 唐三藏 | 100001 | 18 | 1 | 1986-09-01 | 1 |
| 2 | 孙悟空 | 100002 | 18 | 1 | 1986-09-01 | 1 |
| 3 | 猪悟能 | 100003 | 18 | 1 | 1986-09-01 | 1 |
| 4 | 沙悟净 | 100004 | 18 | 1 | 1986-09-01 | 1 |
| 5 | 宋江 | 200001 | 18 | 1 | 2000-09-01 | 2 |
| 6 | 武松 | 200002 | 18 | 1 | 2000-09-01 | 2 |
| 7 | 李逹 | 200003 | 18 | 1 | 2000-09-01 | 2 |
| 8 | 不想毕业 | 200004 | 18 | 1 | 2000-09-01 | 2 |
+----+----------+--------+------+--------+-------------+----------+
8 rows in set (0.00 sec)
这是学生表的信息,但是有些时候我们不希望一些隐私信息显示出来,就可以创建视图。
mysql> create view v_student as(
-> select
-> s.id,
-> s.`name`,
-> s.gender
-> from student s
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> select * from v_student;
+----+----------+--------+
| id | name | gender |
+----+----------+--------+
| 1 | 唐三藏 | 1 |
| 2 | 孙悟空 | 1 |
| 3 | 猪悟能 | 1 |
| 4 | 沙悟净 | 1 |
| 5 | 宋江 | 1 |
| 6 | 武松 | 1 |
| 7 | 李逹 | 1 |
| 8 | 不想毕业 | 1 |
+----+----------+--------+
8 rows in set (0.01 sec)
mysql> desc student;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sno | varchar(10) | NO | | NULL | |
| age | int | YES | | NULL | |
| gender | tinyint(1) | YES | | NULL | |
| enroll_date | date | YES | | NULL | |
| class_id | bigint | NO | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)
这是student表的表结构,如果我们希望把表中的字段sno改成number,修改之前我们的查询语句可能是这样的select id, name, ,sno from student;
,修改之后的查询语句可能是这样的select id, name, number from student
。那么,如果我们的业务代码中存在相关的查询,则需要大面积的修改。
mysql> create view v_student2 as(
-> select
-> id,
-> name,
-> gender,
-> class_id
-> from
-> student);
Query OK, 0 rows affected (0.01 sec)
mysql> select * from v_student2;
+----+----------+--------+----------+
| id | name | gender | class_id |
+----+----------+--------+----------+
| 1 | 唐三藏 | 1 | 1 |
| 2 | 孙悟空 | 1 | 1 |
| 3 | 猪悟能 | 1 | 1 |
| 4 | 沙悟净 | 1 | 1 |
| 5 | 宋江 | 1 | 2 |
| 6 | 武松 | 1 | 2 |
| 7 | 李逹 | 1 | 2 |
| 8 | 不想毕业 | 1 | 2 |
+----+----------+--------+----------+
8 rows in set (0.01 sec)
mysql> select * from v_student2 s, class c where c.id = s.class_id;
+----+----------+--------+----------+----+-----------+
| id | name | gender | class_id | id | name |
+----+----------+--------+----------+----+-----------+
| 1 | 唐三藏 | 1 | 1 | 1 | Java001班 |
| 2 | 孙悟空 | 1 | 1 | 1 | Java001班 |
| 3 | 猪悟能 | 1 | 1 | 1 | Java001班 |
| 4 | 沙悟净 | 1 | 1 | 1 | Java001班 |
| 5 | 宋江 | 1 | 2 | 2 | C++001班 |
| 6 | 武松 | 1 | 2 | 2 | C++001班 |
| 7 | 李逹 | 1 | 2 | 2 | C++001班 |
| 8 | 不想毕业 | 1 | 2 | 2 | C++001班 |
+----+----------+--------+----------+----+-----------+
8 rows in set (0.02 sec)
使用视图进行查询操作,和使用真实表进行查询一样。
mysql> select * from v_student_score;
+----+--------+--------+------+-------------+------------+-------------+-------+
| id | name | sno | age | enroll_date | class_name | course_name | score |
+----+--------+--------+------+-------------+------------+-------------+-------+
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 70.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 33 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 数据结构 | 98 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 70.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 59.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | Java | 33 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | MySQL | 68 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 99 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | Java | 67 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | MySQL | 23 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 56 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 数据结构 | 72 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | Java | 81 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | 计算机网络 | 37 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | C++ | 56 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 操作系统 | 43 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 数据结构 | 79 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | C++ | 80 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | 数据结构 | 92 |
+----+--------+--------+------+-------------+------------+-------------+-------+
23 rows in set (0.02 sec)
-- 修改真实表中的数据
mysql> update score set score = 80 where student_id = 1 and course_id = 1;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2 Changed: 2 Warnings: 0
-- 查看视图中的数据,数据已更新
mysql> select * from v_student_score;
+----+--------+--------+------+-------------+------------+-------------+-------+
| id | name | sno | age | enroll_date | class_name | course_name | score |
+----+--------+--------+------+-------------+------------+-------------+-------+
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 80 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 33 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 数据结构 | 98 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 80 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 59.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | Java | 33 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | MySQL | 68 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 99 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | Java | 67 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | MySQL | 23 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 56 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 数据结构 | 72 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | Java | 81 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | 计算机网络 | 37 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | C++ | 56 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 操作系统 | 43 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 数据结构 | 79 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | C++ | 80 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | 数据结构 | 92 |
+----+--------+--------+------+-------------+------------+-------------+-------+
23 rows in set (0.00 sec)
-- 创建不加排序子句的视图
mysql> create view v_student_score1 as (
-> select
-> s.id,
-> s.`name`,
-> s.sno,
-> s.age,
-> s.enroll_date,
-> cls.`name` as class_name,
-> c.`name` as course_name,
-> sco.score
-> from
-> student s,
-> class cls,
-> score sco,
-> course c
-> where
-> s.class_id = cls.id
-> AND
-> sco.student_id = s.id
-> AND
-> sco.course_id = c.id
-> );
Query OK, 0 rows affected (0.01 sec)
-- 查看新建的视图
mysql> select * from v_student_score1;
+----+--------+--------+------+-------------+------------+-------------+-------+
| id | name | sno | age | enroll_date | class_name | course_name | score |
+----+--------+--------+------+-------------+------------+-------------+-------+
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 80 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 33 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 数据结构 | 98 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 59.5 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | Java | 33 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | MySQL | 68 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 99 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | Java | 67 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | MySQL | 23 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 56 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 数据结构 | 72 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | Java | 81 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | 计算机网络 | 37 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | C++ | 56 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 操作系统 | 43 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 数据结构 | 79 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | C++ | 80 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | 数据结构 | 92 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 80 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 98.5 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
+----+--------+--------+------+-------------+------------+-------------+-------+
23 rows in set (0.00 sec)
-- 通过视图来修改数据
mysql> update v_student_score1 set score = 95 where id = 1;
Query OK, 6 rows affected (0.01 sec)
Rows matched: 6 Changed: 6 Warnings: 0
-- 查询视图,此时视图中的数据已改变
mysql> select * from v_student_score1;
+----+--------+--------+------+-------------+------------+-------------+-------+
| id | name | sno | age | enroll_date | class_name | course_name | score |
+----+--------+--------+------+-------------+------------+-------------+-------+
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 95 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 95 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 95 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | 数据结构 | 95 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 59.5 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | Java | 33 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | MySQL | 68 |
| 3 | 猪悟能 | 100003 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 99 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | Java | 67 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | MySQL | 23 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 计算机网络 | 56 |
| 4 | 沙悟净 | 100004 | 18 | 1986-09-01 | Java001班 | 数据结构 | 72 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | Java | 81 |
| 5 | 宋江 | 200001 | 18 | 2000-09-01 | C++001班 | 计算机网络 | 37 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | C++ | 56 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 操作系统 | 43 |
| 6 | 武松 | 200002 | 18 | 2000-09-01 | C++001班 | 数据结构 | 79 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | C++ | 80 |
| 7 | 李逹 | 200003 | 18 | 2000-09-01 | C++001班 | 数据结构 | 92 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | Java | 95 |
| 1 | 唐三藏 | 100001 | 18 | 1986-09-01 | Java001班 | MySQL | 95 |
| 2 | 孙悟空 | 100002 | 18 | 1986-09-01 | Java001班 | Java | 60 |
+----+--------+--------+------+-------------+------------+-------------+-------+
23 rows in set (0.00 sec)
-- 查询真实表,真实表中的数据也已改变
mysql> select * from score;
+----+------------+-----------+-------+
| id | student_id | course_id | score |
+----+------------+-----------+-------+
| 1 | 1 | 1 | 95 |
| 2 | 1 | 3 | 95 |
| 3 | 1 | 5 | 95 |
| 4 | 1 | 6 | 95 |
| 5 | 2 | 1 | 60 |
| 6 | 2 | 5 | 59.5 |
| 7 | 3 | 1 | 33 |
| 8 | 3 | 3 | 68 |
| 9 | 3 | 5 | 99 |
| 10 | 4 | 1 | 67 |
| 11 | 4 | 3 | 23 |
| 12 | 4 | 5 | 56 |
| 13 | 4 | 6 | 72 |
| 14 | 5 | 1 | 81 |
| 15 | 5 | 5 | 37 |
| 16 | 6 | 2 | 56 |
| 17 | 6 | 4 | 43 |
| 18 | 6 | 6 | 79 |
| 19 | 7 | 2 | 80 |
| 20 | 7 | 6 | 92 |
| 21 | 1 | 1 | 95 |
| 22 | 1 | 3 | 95 |
| 23 | 2 | 1 | 60 |
+----+------------+-----------+-------+
23 rows in set (0.00 sec)
修改真实表会影响视图,修改视图同样会影响真实表
以下视图不可更新
- 创建视图时使用聚合函数的视图
- 创建视图时使用
DISTINCT
- 创建视图时使用
GROUP BY
以及HAVING
子句- 创建视图时使用
UNION
或UNION ALL
- 查询列表中使用子查询。
- 在FROM子句中不可更新视图
- 创建视图时使用
ORDER BY
-- 语法
drop view view_name;
可以一个一个的删除;也可以一次性删除多个,用逗号将视图名隔开。