IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL的视图定义、规则与视图作用、创建视图和修改视图,以及视图的保存 -> 正文阅读

[大数据]MySQL的视图定义、规则与视图作用、创建视图和修改视图,以及视图的保存

MySQL数据库之视图

视图

1、视图定义

视图通过以定制的方式显示来自一个或多个表的数据
视图是一种数据库对象,用户可以像查询普通表一样查询视图
视图内其实没有存储任何数据,它只是对表的一个查询
视图的定义保存在数据字典内,创建视图所基于对表称为“基表”

1、为什么需要视图

例如经常要对emp和dept表进行连接查询,每次都要做表的连接,写同样的一串语句,同时由于工资列队数据比较敏感,对外要求不可见;使用子查询,每次做表的连接写的语句过长,把查询语句做成视图,下次查询视图就好了;
对这样的问题就可以通过视图来解决。

3、视图的作用优点

作用:

控制安全
保存查询数据

优点:

提供了灵活一致级别安全性。
隐藏了数据的复杂性
简化了用户的SQL指令
通过重命名列,从另一个角度提供数据

4、创建视图

CREATE [OR REPLACE] VIEW 视图名
	[(alias[, alias]...)]--为视图字段指定别名
	AS subquery
	[WITH READ ONLY];

举例说明:创建视图, emp_V1, 包括10号部门的所有雇员信息.

mysql> create view emp_v1 as	//创建视图emp_v1
    -> select * from emp
    -> where deptno=10;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from emp_v1;
+-------+-----------+-----------+------+------------+-------+------+--------+
| empno | ename     | job       | mgr  | hiredate   | sai   | comm | deptno |
+-------+-----------+-----------+------+------------+-------+------+--------+
|  1007 | 张飞      | 经理      | 1009 | 2001-09-01 | 24500 | NULL |     10 |
|  1009 | 曾阿牛    | 董事长    | NULL | 2001-11-17 | 50000 | NULL |     10 |
|  1014 | 黄盖      | 文员      | 1007 | 2002-01-23 | 13000 | NULL |     10 |
+-------+-----------+-----------+------+------------+-------+------+--------+
3 rows in set (0.00 sec)

5、视图使用规则

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

1)视图的嵌套:

4 . 视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图
可以在创建视图emp_v2中进行嵌套emp_v1;

mysql> create view emp_v1 as
    -> select * from emp
    -> where deptno=10;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from emp_v1;
+-------+-----------+-----------+------+------------+-------+------+--------+
| empno | ename     | job       | mgr  | hiredate   | sai   | comm | deptno |
+-------+-----------+-----------+------+------------+-------+------+--------+
|  1007 | 张飞      | 经理      | 1009 | 2001-09-01 | 24500 | NULL |     10 |
|  1009 | 曾阿牛    | 董事长    | NULL | 2001-11-17 | 50000 | NULL |     10 |
|  1014 | 黄盖      | 文员      | 1007 | 2002-01-23 | 13000 | NULL |     10 |
+-------+-----------+-----------+------+------------+-------+------+--------+
3 rows in set (0.00 sec)

mysql> create view emp_v2 as	//创建视图emp_v2嵌套emp_v1
    -> select * from emp_v1
    -> where job='文员';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from emp_v2
    -> ;
+-------+--------+--------+------+------------+-------+------+--------+
| empno | ename  | job    | mgr  | hiredate   | sai   | comm | deptno |
+-------+--------+--------+------+------------+-------+------+--------+
|  1014 | 黄盖   | 文员   | 1007 | 2002-01-23 | 13000 | NULL |     10 |
+-------+--------+--------+------+------------+-------+------+--------+
1 row in set (0.00 sec)

2)视图排序的覆盖

5 . 在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆盖前面的 ORDER BY。
下面举例说明,新的视图排序会覆盖原来的视图排序

mysql> create view emp_v3 as
    -> select * from emp_v1
    -> order by sai desc;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from emp_v3;	//此处是降序的排序
+-------+-----------+-----------+------+------------+-------+------+--------+
| empno | ename     | job       | mgr  | hiredate   | sai   | comm | deptno |
+-------+-----------+-----------+------+------------+-------+------+--------+
|  1009 | 曾阿牛    | 董事长    | NULL | 2001-11-17 | 50000 | NULL |     10 |
|  1007 | 张飞      | 经理      | 1009 | 2001-09-01 | 24500 | NULL |     10 |
|  1014 | 黄盖      | 文员      | 1007 | 2002-01-23 | 13000 | NULL |     10 |
+-------+-----------+-----------+------+------------+-------+------+--------+
3 rows in set (0.00 sec)

mysql> select * from emp_v3
    -> order by sai;			//这里覆盖之前升序排序
+-------+-----------+-----------+------+------------+-------+------+--------+
| empno | ename     | job       | mgr  | hiredate   | sai   | comm | deptno |
+-------+-----------+-----------+------+------------+-------+------+--------+
|  1014 | 黄盖      | 文员      | 1007 | 2002-01-23 | 13000 | NULL |     10 |
|  1007 | 张飞      | 经理      | 1009 | 2001-09-01 | 24500 | NULL |     10 |
|  1009 | 曾阿牛    | 董事长    | NULL | 2001-11-17 | 50000 | NULL |     10 |
+-------+-----------+-----------+------+------------+-------+------+--------+
3 rows in set (0.00 sec)

6、修改视图

修改视图可以有两种方法进行修改

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

–CREATE OR REPLACE VIEW emp_v_10
	–(id, name, sal, dept_id)
	–AS SELECT id,name, 
	–salary, dept_id
	–FROM employees
	–WHERE dept_id = 10;

在CREATE VIEW 语句中字段与子查询中的字段必须一一对应,否则就别指定别名,或在子查询中指定别名

使用ALTER VIEW 语句修改EMP_V_10 视图. 为每个列指定列名.

–ALTER VIEW emp_v_10
	–(id, name, sal, dept_id)
	–AS SELECT id,name, 
	–salary, dept_id
	–FROM employees
	–WHERE dept_id = 10;

在CREATE VIEW 语句中字段与子查询中的字段必须一一对应,否则就别指定别名,或在子查询中指定别名

2)创建复杂视图
创建一个从两个表中查询数据,并进行分组计算的复杂视图.
在数据库中插入另一个表

mysql> select * from dept;
+--------+-----------+--------+
| deptno | dname     | lo     |
+--------+-----------+--------+
|     10 | 教研部    | 北京   |
|     20 | 学工部    | 上海   |
|     30 | 销售部    | 广州   |
|     40 | 财务部    | 武汉   |
+--------+-----------+--------+
4 rows in set (0.00 sec)

多表连接视图:复杂视图

多个表更体现出视图的优势
创建复杂视图将两个表连接起来

mysql> create view emp_v4 as
    -> select e.*,d.dname
    -> from dept d,
    -> (select deptno,count(1) from emp
    -> group by deptno
    -> having count(1)>=1) e
    -> where d.deptno=e.deptno;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from emp_v4;
+--------+----------+-----------+
| deptno | count(1) | dname     |
+--------+----------+-----------+
|     10 |        3 | 教研部    |
|     20 |        4 | 学工部    |
|     30 |        6 | 销售部    |
+--------+----------+-----------+
3 rows in set (0.00 sec)

7、 删除视图

   删掉视图不会导致数据的丢失,因为视图是基于数据库的表之上的一个查询定义.  
   DROP VIEW view_name;
mysql> drop view emp_v1;
Query OK, 0 rows affected (0.00 sec)

mysql> drop view emp_v2;
Query OK, 0 rows affected (0.00 sec)

8:MySQL数据库中的视图保存:

MySQL视图保存在information_schema表里面

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db                 |
| db1                |
| gtid               |
| it                 |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test2              |
+--------------------+
10 rows in set (0.00 sec)

mysql> use information_schema 

需要进入information_schema数据库进行查看视图

mysql> select * from VIEWS 
	->	where TABLE_NAME='emp_v1'\G;
*************************** 1. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: db1
          TABLE_NAME: emp_v1
     VIEW_DEFINITION: select `db1`.`emp`.`empno` AS `empno`,`db1`.`emp`.`ename` AS `ename`,`db1`.`emp`.`job` AS `job`,`db1`.`emp`.`mgr` AS `mgr`,`db1`.`emp`.`hiredate` AS `hiredate`,`db1`.`emp`.`sai` AS `sai`,`db1`.`emp`.`comm` AS `comm`,`db1`.`emp`.`deptno` AS `deptno` from `db1`.`emp` where (`db1`.`emp`.`deptno` = 10)
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> 
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:10:56  更:2022-05-08 08:13:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:05:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码