目录
一、视图概述
二、视图的作用和优点
三、视图的使用规则
四、视图操作
1、创建视图
2、查看视图
1)查看视图基本信息
2)查看视图详细信息
3、修改视图
4、更新视图
5、删除视图
一、视图概述
视图是数据库中的一个虚拟表,同真实表一样,视图包含一系列带有名称的行和列数据。
视图是从一个或者多个表中导出来的,视图的行为与表非常相似,在视图中,用户可以使用SELECT、INSERT、UPDATE、DELETE等语句。从MySQL5.0开始就可以使用视图,视图可以使用户操作方便,而且可以保障数据库系统的安全性。视图其实没有存储任何数据,它只是对表的一个查询,视图的定义保存在数据字典内,创建视图所基于的表叫做‘基表’。
二、视图的作用和优点
作用:控制安全、保存查询数据
优点:提供了灵活一致级别安全性、隐藏了数据的复杂性、简化了用户的SQL指令、通过重命名列,从另一个角度提供数据。
三、视图的使用规则
1、视图名必须有唯一的命名;
2. 在mysql中视图的数量没有限制;
3. 创建视图必须从管理员那里获得必要的权限;
4. 视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图;
5. 在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆盖前面的 ORDER BY;
6. 视图不能索引,也不能关联触发器或默认值;
7. 视图可以和表同时使用。
四、视图操作
1、创建视图
基本语法
create [or replace] [algorithm = {undefined | merge | temptable}]
view 视图名 [字段列表] as 查询语句
[with [cascaded | local] check option]
例如:
mysql> create view view_emp3 as select * from emp3;
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+-----------------+
| Tables_in_mydb3 |
+-----------------+
| dept3 |
| emp3 |
| view_emp3 |
+-----------------+
3 rows in set (0.00 sec)mysql> select * from view_emp3;
+-----+--------------+------+---------+
| eid | ename | age | dept_id |
+-----+--------------+------+---------+
| 1 | 乔峰 | 20 | 1001 |
| 10 | 丁春秋 | 71 | 1005 |
| 2 | 段誉 | 21 | 1001 |
| 3 | 虚竹 | 23 | 1001 |
| 4 | 阿紫 | 18 | 1001 |
| 5 | 扫地僧 | 85 | 1002 |
| 6 | 李秋水 | 33 | 1002 |
| 7 | 鸠摩智 | 50 | 1002 |
| 8 | 天山童姥 | 60 | 1003 |
| 9 | 慕容博 | 58 | 1003 |
+-----+--------------+------+---------+
10 rows in set (0.03 sec)
2、查看视图
1)查看视图基本信息
语法1
describe 视图名;
例如
mysql> describe view_emp3;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| eid | varchar(20) | NO | | NULL | |
| ename | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| dept_id | varchar(20) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
语法2
show table status like '视图名' \G
例如
mysql> show table status like 'view_emp3' \G
*************************** 1. row ***************************Name: view_emp3Engine: NULLVersion: NULLRow_format: NULLRows: NULLAvg_row_length: NULLData_length: NULL
Max_data_length: NULLIndex_length: NULLData_free: NULLAuto_increment: NULLCreate_time: NULLUpdate_time: NULLCheck_time: NULLCollation: NULLChecksum: NULLCreate_options: NULLComment: VIEW
1 row in set (0.00 sec)
2)查看视图详细信息
语法
show create view 视图名;
例如
mysql> show create view view_emp3;
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View | character_set_client | collation_connection |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| view_emp3 | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_emp3` AS select `emp3`.`eid` AS `eid`,`emp3`.`ename` AS `ename`,`emp3`.`age` AS `age`,`emp3`.`dept_id` AS `dept_id` from `emp3` | utf8 | utf8_general_ci |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)
3、修改视图
语法1
create [or replace] [algorithm = {undefined | merge | temptable}]
view 视图名 [字段列表] as 查询语句
[with [cascaded | local] check option]
语法2
alter [algorithm = {undefined | merge | temptable}]
view 视图名 [字段列表] as 查询语句
[with [cascaded | local] check option]
例如
mysql> alter view view_emp3 as select eid,ename from emp3;
Query OK, 0 rows affected (0.01 sec)
#修改后查看表基本信息
mysql> desc view_emp3;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| eid | varchar(20) | NO | | NULL | |
| ename | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
4、更新视图
语法
#更新数据
update 视图名 set 字段名1=值1,…… [where <条件>];
#插入数据
insert into 视图名 [字段名列表] values (字段1值,字段2值,……) [,(字段1值,字段2值,……)……];
#删除数据
delete from 视图名 [where <条件>];
例如
#更新数据前查看表数据
mysql> select * from view_emp3;
+-----+--------------+
| eid | ename |
+-----+--------------+
| 1 | 乔峰 |
| 10 | 丁春秋 |
| 2 | 段誉 |
| 3 | 虚竹 |
| 4 | 阿紫 |
| 5 | 扫地僧 |
| 6 | 李秋水 |
| 7 | 鸠摩智 |
| 8 | 天山童姥 |
| 9 | 慕容博 |
+-----+--------------+
10 rows in set (0.00 sec)#修改数据 eid=10 的记录ename为‘张三’
mysql> update view_emp3 set ename='张三' where eid=10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0#插入一个数据eid=20 ename='李四'的数据
mysql> insert into view_emp3 values (20,'李四');
Query OK, 1 row affected (0.00 sec)#更新数据后进行查看
mysql> select * from view_emp3;
+-----+--------------+
| eid | ename |
+-----+--------------+
| 1 | 乔峰 |
| 10 | 张三 |
| 2 | 段誉 |
| 20 | 李四 |
| 3 | 虚竹 |
| 4 | 阿紫 |
| 5 | 扫地僧 |
| 6 | 李秋水 |
| 7 | 鸠摩智 |
| 8 | 天山童姥 |
| 9 | 慕容博 |
+-----+--------------+#删除eid=20的数据
mysql> delete from view_emp3 where eid=20;
Query OK, 1 row affected (0.00 sec)#删除后再进行查看
mysql> select * from view_emp3;
+-----+--------------+
| eid | ename |
+-----+--------------+
| 1 | 乔峰 |
| 10 | 张三 |
| 2 | 段誉 |
| 3 | 虚竹 |
| 4 | 阿紫 |
| 5 | 扫地僧 |
| 6 | 李秋水 |
| 7 | 鸠摩智 |
| 8 | 天山童姥 |
| 9 | 慕容博 |
+-----+--------------+
10 rows in set (0.00 sec)
5、删除视图
语法
drop view [if exists] 视图视 [,视图名] …… [restrict | cascade];
例如
#删除前先查看存在的表
mysql> show tables;
+-----------------+
| Tables_in_mydb3 |
+-----------------+
| dept3 |
| emp3 |
| view_emp3 |
+-----------------+
3 rows in set (0.00 sec)#删除视图view_emp3
mysql> drop view view_emp3;
Query OK, 0 rows affected (0.00 sec)#删除后再进行查看
mysql> show tables;
+-----------------+
| Tables_in_mydb3 |
+-----------------+
| dept3 |
| emp3 |
+-----------------+
2 rows in set (0.00 sec)
参考书籍:MySQL5.7从入门到精通-清华大学出版社