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必知必会4 -> 正文阅读

[大数据]MySQL必知必会4

使用视图

视图是虚拟的表。所以在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其它视图或表,甚至能添加和更新数据,然而并不是所有的视图都能够进行添加和更新的操作
所以在对视图进行相应的操作之前,我们先来讲解一下视图的规则和限制:

  • 与表一样,视图必须唯一命名(不能给视图取与别的视图或者表相同的名字)

  • 对于可以创建的视图数目没有限制

  • 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予的。

  • 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图

  • ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY(即构建这个视图的SELECT中同样含有ORDER BY),那么构造这个视图的SELECT中的ORDER BY将会被覆盖
    在这里插入图片描述

  • 视图不能索引,也不能有关联的触发器或默认值。

  • 视图可以和表一起使用,利用,编写一条连接表和视图的SELECT语句。

在讲解视图的使用规则之后,我们就要开始使用视图了:

  • 利用CREATE VIEW view_name AS SELECT XXX FROM table_name YYY; 从而从SELECT子句中检索到的数据用来构建vie_name的视图

  • SELECT xxx1,xxx2,xxx3…xxxn FROM view_name; 用来检索view_name中的数据.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • SHOW CREATE VIEW view_name;用来显示构建view_name这个视图的MySQL语句。
    在这里插入图片描述

  • DROP VIEW view_name; 用来删除view_name这个视图.

  • UPDATE view_name SET 列名1 = 新值1,列名2 = 新值2 WHERE xxx; --用来修改符合WHERE子句中的对应的列的值。

  • DELETE FROM view_name WHERE xxx; 删除符合WHERE条件的行。
    但值得一提的是,一旦更新了视图,那么对应的基表同样会做出相应的变化。同时需要注意,更新和删除视图的某一行需要在一定的条件下才可以进行,否则就会发生报错.
    在这里插入图片描述

在这里插入图片描述

但是并不是所有的视图都可以进行更新的,在构建视图的SELECT语句中只要有下面的一个条件,那么视图就不可以进行更新:

  • 聚集函数
  • 分组(使用GROUP BY和HAVING)
  • 联结
  • 子查询
  • 并(UNION)
  • DISTINCT
  • 导出(计算)列
    在这里插入图片描述

使用存储过程

存储过程,简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。基于此,我们就会很容易知道为什么需要使用存储过程了:
在这里插入图片描述
在这里插入图片描述
所以,接下来我们将来讲解存储过程的创建、使用、删除的操作:

  • 创建存储过程:
创建存储过程:
CREATE PROCEDURE procedure_name()
BEGIN
     SELECT xxx FROM table_name;
     .........一系列的SQL语句
 END; 

然而,如果利用MySQL命令行来写的话,就会发生报错
在这里插入图片描述
因此利用MySQL命令行创建存储过程之前,需要利用DELIMITER //指定临时结尾符尾//,然后需要在END后面写上//,此时对应的存储过程就创立成功了。然后需要再次利用DELIMITER ;指定结尾符为 ;

在这里插入图片描述
在这里插入图片描述

  • 使用存储过程:需要利用到CALL子句
执行存储过程:
CALL procedure_name();
如果创建存储过程的括号里面有参数,那么对应地执行CALL语句的括号里面也要有对应地参数。否则,没有参数的时候,直接写一个括号就好。不可以不写括号,因为存储过程本之上就相当于一个函数。

在这里插入图片描述
在这里插入图片描述
利用CALL procedure_name()可能显示数据,也可能不会显示数据,取决于括号里面是否存在参数,并且这个参数被什么修饰的。一般,存储过程并不显示结果,而是把结果返回给你指定的变量
在这里插入图片描述
在这里插入图片描述

  • 删除存储过程
删除存储过程:
DROP PROCEDURE procedure_name;注意这时候不需要再写存储过程名字后面的括号了,直接就是它的存储过程名
但是这样可能会发生报错,因为可能存在procedure_name不存在的情况,所以这个语句也可以修改为
DROP PROCEDURE IF EXISTS procedure_name;

在这里插入图片描述

  • 检查存储过程
显示创建的存储过程的CREATE语句:
SHOW CREATE PROCEDURE procedure_name;注意这时候不需要再存储过程后面的括号了,直接就是存储过程
的名字即可

获得包括何时、由谁创建等详细信息的存储过程列表,需要使用SHOW PROCEDURE STATUS procedure_name;注意这时候并不需要再存储过程名后面加上括号了,直接写存储过程名即可。
然而SHOW PROCEDURE STATUS procedure_name却发生了报错,这是因为需要限制过程状态的结果。所以需要改成SHOW PROCEDURE STATUS LIKE "procedere_name";利用LIKE指定一个过滤模式从而达到限制输出的目的.

在这里插入图片描述
在这里插入图片描述

触发器

触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句),触发器主要分为三种类型:

  • INSERT
  • DELETE
  • UPDATE

所以在讲解这三种触发器之前,我们需要知道怎样创建一个触发器:
毫无疑问,在创建触发器之前,我们需要知道的信息主要有:

  • 唯一的触发器名
  • 触发器关联的表
  • 触发器应该相应的活动(DELETE或INSERT或UPDATE)
  • 触发器何时执行(之前还是之后)

基于上面几个条件,我们将可以知道创建触发器的SQL语句了:

CREATE TRIGGER trigger_name 
BEFORE / AFTER       DELETE /  UPDATE  /INSERT  ON  table_name  FOR EACH ROW
SELECT/SET XXXX;

举一个书上的例子:

在这里插入图片描述
然而照着书上的例子运行的时候,却发现出现了错误:
在这里插入图片描述
所以创建的时候,还需要再SELECT之后添加INTO @xxx字段才可以

所以正确的语法形式为:

CREATE TRIGGER trigger_name
AFTER / BEFORE    UPDATE/ INSERT / DELETE ON table_name
FOR EACN ROW
SELECT / SET XXX INTO @yyy.之所以可以存在SET是因为再进行插入或者更新的时候可以进行SET的操作,而DELETE只能进行SELECT操作

了解创建触发器之后,我们当然需要知道怎样删除触发器啦,和之前的语法类似,DROP TRIGGER trigger_name,从而实现删除trigger_name这个触发器,然而如果trigger_name这个触发器不存在,那么这个句段就会发生报错,所以为了避免这种情况,所以利用IF EXISTS,所以DROP TRIGGER IF EXISTS trigger_name,从而保证了trigger_name这个触发器哪怕不存在执行这个字段也不会发生报错.

在这里插入图片描述

  • INSERT 触发器

对应得规则为如下:
在这里插入图片描述
在这里插入图片描述

  • DELETE 触发器
    而对于DELETE触发器,规则刚好和INSERT相反,它具有的是OLD得虚拟表,表示要被删除得行。因为是被删除,所以对于OLD只能进行SELECT操作,而不可以做其他操作了
    在这里插入图片描述

  • UPDATE 触发器
    而对于UPDATE触发器来说,它的规则为:

  • 在UPDATE触发器中,可以引用一个名为OLD虚拟表访问更新前得值,引用名为NEW的虚拟表访问更新后的值

  • BEFORE UPDATE触发器中,NEW的值可以被更改,也即可以进行SET操作,而在AFTER UPDATE触发器中只能进行SELECT操作.

  • OLD的值全都是只读的,不可以更新

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:37:42  更:2021-09-24 10:39:00 
 
开发: 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 23:03:57-

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