2021-04-19

&11、视图(View)

一、什么是视图(虚拟表)

1.视图通过以定制的方式显示来自一个或多个表的数据

2.视图是一种数据库对象,用户可以像查询普通表一样查询视图

3.视图内其实没有存储任何数据,它只是对表的一个查询

4.视图的定义保存在数据字典内,创建视图所基于对表称为“基表”

二、为什么需要视图

1.安全性:例如经常要对emp和dept表进行连接查询,每次都要做表的连接,写同样的一串语句,同时由于工资列队数据比较敏感,对外要求不可见。对这样的问题就可以通过视图来解决。

三、作用与安全

1.作用
a.控制安全
b.保存查询数据
2、优点
a.提供了灵活一致级别安全性。
b.隐藏了数据的复杂性
c.简化了用户的SQL指令
d.通过重命名列,从另一个角度提供数据

四、创建视图

1、定义视图——视图是数据库对象,使用create语句定义

create view view_name as sql语句
mysql> select * from t_use;
+---------+------------+------+----------+---------+---------------------+---------------------+
| bumenid | yuangongid | name | zzmm     | vage    | workday             | birthday            |
+---------+------------+------+----------+---------+---------------------+---------------------+
|     101 |       1001 | 张三 | 共产党员 | 3500.00 | 2015-03-04 00:00:00 | 1990-07-01 00:00:00 |
|     101 |       1002 | 李四 | 共青团员 | 3200.00 | 2017-02-06 00:00:00 | 1997-02-08 00:00:00 |
|     102 |       1003 | 王五 | 共产党员 | 5500.00 | 2016-10-10 00:00:00 | 1983-06-08 00:00:00 |
|     102 |       1003 | 赵六 | 群众     | 8500.00 | 2011-01-04 00:00:00 | 1994-09-05 00:00:00 |
|     102 |       1005 | 钱七 | 共产党员 | 4800.00 | 2014-04-01 00:00:00 | 1992-12-30 00:00:00 |
|     102 |       1006 | 孙八 | 共产党员 | 4500.00 | 2017-05-05 00:00:00 | 1996-09-02 00:00:00 |
+---------+------------+------+----------+---------+---------------------+---------------------+
6 rows in set (0.00 sec)

mysql> create view v_use as select bumenid,yuangongid,name,zzmm from t_use;
***创建视图v_use
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v_use;
***查看视图
+---------+------------+------+----------+
| bumenid | yuangongid | name | zzmm     |
+---------+------------+------+----------+
|     101 |       1001 | 张三 | 共产党员 |
|     101 |       1002 | 李四 | 共青团员 |
|     102 |       1003 | 王五 | 共产党员 |
|     102 |       1003 | 赵六 | 群众     |
|     102 |       1005 | 钱七 | 共产党员 |
|     102 |       1006 | 孙八 | 共产党员 |
+---------+------------+------+----------+

2、使用规则

1. 视图必须有唯一命名
2. 在mysql中视图的数量没有限制
3. 创建视图必须从管理员那里获得必要的权限
4. 视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图
5.在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆盖前面的OREDR BY.
6.视图不能索引,也不能关联触发器或默认值
7. 视图可以和表同时使用

三、修改视图——本质是修改表

使用CREATE OR REPLACE VIEW 语句修改视图. 为每个列指定列名.

mysql> create or replace view v_use as select * from t_use;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v_use;
+---------+------------+------+----------+---------+---------------------+---------------------+
| bumenid | yuangongid | name | zzmm     | vage    | workday             | birthday            |
+---------+------------+------+----------+---------+---------------------+---------------------+
|     101 |       1001 | 张三 | 共产党员 | 3500.00 | 2015-03-04 00:00:00 | 1990-07-01 00:00:00 |
|     101 |       1002 | 李四 | 共青团员 | 3200.00 | 2017-02-06 00:00:00 | 1997-02-08 00:00:00 |
|     102 |       1003 | 王五 | 共产党员 | 5500.00 | 2016-10-10 00:00:00 | 1983-06-08 00:00:00 |
|     102 |       1003 | 赵六 | 群众     | 8500.00 | 2011-01-04 00:00:00 | 1994-09-05 00:00:00 |
|     102 |       1005 | 钱七 | 共产党员 | 4800.00 | 2014-04-01 00:00:00 | 1992-12-30 00:00:00 |
|     102 |       1006 | 孙八 | 共产党员 | 4500.00 | 2017-05-05 00:00:00 | 1996-09-02 00:00:00 |
+---------+------------+------+----------+---------+---------------------+---------------------+
***修改视图,把所有的列出来
+---------+------------+------+----------+---------+---------------------+---------------------+
| bumenid | yuangongid | name | zzmm     | vage    | workday             | birthday            |
+---------+------------+------+----------+---------+---------------------+---------------------+
|     101 |       1001 | 张三 | 共产党员 | 3500.00 | 2015-03-04 00:00:00 | 1990-07-01 00:00:00 |
|     101 |       1002 | 李四 | 共青团员 | 3200.00 | 2017-02-06 00:00:00 | 1997-02-08 00:00:00 |
|     102 |       1003 | 王五 | 共产党员 | 5500.00 | 2016-10-10 00:00:00 | 1983-06-08 00:00:00 |
|     102 |       1003 | 赵六 | 群众     | 8500.00 | 2011-01-04 00:00:00 | 1994-09-05 00:00:00 |
|     102 |       1005 | 钱七 | 共产党员 | 4800.00 | 2014-04-01 00:00:00 | 1992-12-30 00:00:00 |
|     102 |       1006 | 孙八 | 共产党员 | 4500.00 | 2017-05-05 00:00:00 | 1996-09-02 00:00:00 |
+---------+------------+------+----------+---------+---------------------+---------------------+

mysql> alter view v_use as select bumenid,yuangongid,name from t_use where zzmm="共产党员";
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v_use;
+---------+------------+------+
| bumenid | yuangongid | name |
+---------+------------+------+
|     101 |       1001 | 张三 |
|     102 |       1003 | 王五 |
|     102 |       1005 | 钱七 |
|     102 |       1006 | 孙八 |
+---------+------------+------+
***找出里面zzmm="共产党员"的人,列出bumenid,yuangongid,name

四、删除视图

DROP VIEW view_name;

五、查看视图详细结构

mysql> show create view v_use;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View  | Create View                                                                                                                                                                                                                                     | character_set_client | collation_connection |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| v_use | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_use` AS select `t_use`.`bumenid` AS `bumenid`,`t_use`.`yuangongid` AS `yuangongid`,`t_use`.`name` AS `name` from `t_use` where (`t_use`.`zzmm` = '共产党员') | gbk                  | gbk_chinese_ci       |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mysql> show create view v_use\G
*************************** 1. row ***************************
           View: v_use(表名字)
     (SQL语句)  Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_use` AS select `t_use`.`bumenid` AS `bumenid`,`t_use`.`yuangongid` AS `yuangongid`,`t_use`.`name` AS `name` from `t_use` where (`t_use`.`zzmm` = '共产党员')
character_set_client: gbk
collation_connection: gbk_chinese_ci

六、更新视图

mysql> insert into v_use values (102,1007,"赵八");
Query OK, 1 row affected (0.00 sec)
mysql> select * from v_use;
+---------+------------+------+----------+---------+---------------------+---------------------+
| bumenid | yuangongid | name | zzmm     | vage    | workday             | birthday            |
+---------+------------+------+----------+---------+---------------------+---------------------+
|     101 |       1001 | 张三 | 共产党员 | 3500.00 | 2015-03-04 00:00:00 | 1990-07-01 00:00:00 |
|     101 |       1002 | 李四 | 共青团员 | 3200.00 | 2017-02-06 00:00:00 | 1997-02-08 00:00:00 |
|     102 |       1003 | 王五 | 共产党员 | 5500.00 | 2016-10-10 00:00:00 | 1983-06-08 00:00:00 |
|     102 |       1003 | 赵六 | 群众     | 8500.00 | 2011-01-04 00:00:00 | 1994-09-05 00:00:00 |
|     102 |       1005 | 钱七 | 共产党员 | 4800.00 | 2014-04-01 00:00:00 | 1992-12-30 00:00:00 |
|     102 |       1006 | 孙八 | 共产党员 | 4500.00 | 2017-05-05 00:00:00 | 1996-09-02 00:00:00 |
|     102 |       1007 | 赵八 | NULL     |    NULL | NULL                | NULL                |
+---------+------------+------+----------+---------+---------------------+---------------------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值