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中的视图、触发器和存储过程

1.视图

1.1 什么是视图

为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。
视图,本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似,包含一系列带有名称的列和行数据。但是,视图并不在数据库中以储存的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。

视图使开发者只关心感兴趣的某些特定数据和所负责的特定任务,只能看到视图中所定义的数据,而不是视图所引用表中的数据,从而提高了数据库中数据的安全性。

1.2 视图的特点

视图的特点如下:

视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
视图是由基本表(实表)产生的表(虚表)。
视图的建立和删除不影响基本表。
对视图内容的更新(添加,删除和修改)直接影响基本表。
当视图来自多个基本表时,不允许添加和删除数据。视图的操作包括创建视图,查看视图,删除视图和修改视图。

1.3 视图的使用场景

视图根本用途:简化sql查询,提高开发效率。如果说还有另外一个用途那就是兼容老的表结构。

下面是视图的常见使用场景:重用SQL语句;

简化复杂的SQL操作。在编写查询后,可以方便的重用它而不必知道它的基本查询细节;使用表的组成部分而不是整个表;
保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限;
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据

1.4 语法

1)创建视图

CREATE [ OR REPACE ] VIEW 视图名称[ (列名列表) ] AS SELECT语句 [ WITH [ CASCADED | LOCAL] CHECK OPTION ];

2)查询

查看创建视图语句:SHOW CREATE VIEW 视图名称;

查看视图数据:SELECT * FROM 视图名称……;

3)修改

方式一:CREATE [ OR REPACE ] VIEW 视图名称[ (列名列表) ] AS SELECT语句 [ WITH [ CASCADED | LOCAL] CHECK OPTION ];

方式二:ALTER VIEW 视图名称[ ( 列名列表) ] AS SELECT语句 [ WITH [ CASCADED | LOCAL] CHECK OPTION ];

4)删除

DROP VIEW [ IF EXISTS ] 视图名称 [ ,视图名称] ……;

1.5 视图的优点

1、查询简单化:视图能简化用户的操作。
2、数据安全性:视图使用户能以多种角度看待同一数据,能够对机密数据提供安全保护逻辑数据独立性。视图对重构数据库提供了一定程度的逻辑独立性。

1.6 视图的缺点

1、性能:数据库必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,数据库也把它变成一个复杂的结合体,需要花费一定的时间。
2、修改限制:当用户试图修改视图的某些行时,数据库必须把它转化为对基本表的某些行的修改。事实上,当从视图中插入或者删除时,情况也是这样。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的,这些视图有如下特征
有UNIQUE等集合操作符的视图。
有GROUP BY子句的视图。
有诸如AVG\SUM\MAX等聚合函数的视图。
使用DISTINCT关键字的视图。
连接表的视图。

2.触发器

2.1 什么是触发器

触发器是用户定义在关系表上的一类由事件驱动的特殊的存储过程。触发器是指一段代码,当触发某个事件时,自动执行这些代码。
在这里插入图片描述

2.2 语法

1)创建

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW--行级触发器
BEGIN
	trigger_stmt;
END;

2)查看

show tirggers;

3)删除

DROP TRIGGER [schema_name. ]trigger_name ; 
--如果没有指定schema name,默认为当前数据库。

2.3 触发器的使用场景

可以通过数据库中的相关表实现级联更改。
实时监控某张表中的某个字段的更改而需要做出相应的处理。
例如可以生成某些业务的编号。
注意不要滥用,否则会造成数据库及应用程序的维护困难。

2.4 Mysql中的触发器

Before Insert
After Insert
Before Update
After Update
Before Delete

3.存储过程

3.1 什么是存储过程

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需要创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

3.2 语法

1)创建

create procedure 存储过程名称([参数列表])
begin
?	--sql语句
end;

2)调用

call 名称([参数]);

3)查看

select * from information_schema.routines where routine_schema ='xxx';
--查询指定函数==数据库的存储过程及状态信息

show create procedure 存储过程名称;
--查询某个存储过程的定义

4)删除

drop procedure [ if exists ] 存储过程名称;

3.3 变量

在MySQL中变量分为三种类型: 系统变量、用户定义变量、局部变量

1)系统变量

系统变量:是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL),会话变量(SESSION)。

(1)查看系统变量
在这里插入图片描述(2)设置系统变量
在这里插入图片描述注意:如果没有指定SESSION/GLOBAL,默认是SESSION,会话变量。

mysql服务重新启动之后,所设置的全局参数会失效,要想不失效,可以在 /etc/my.cnf 中配置。

A. 全局变量(GLOBAL): 全局变量针对于所有的会话。

B. 会话变量(SESSION): 会话变量针对于单个会话,在另外一个会话窗口就不生效了。

2)用户定义变量

用户定义变量 是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 “@变量名” 使用就可以。其作用域为当前连接。

(1)赋值

方式一:
在这里插入图片描述赋值时,可以使用 = ,也可以使用 := 。推荐使用 := 赋值,因为在if判断语句中,判断两个值是否相等使用“=”,避免赋值和相等判断混淆使用。

方式二:
在这里插入图片描述(2)使用
在这里插入图片描述
注:用户定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL。

3)局部变量

局部变量 是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN … END块。

(1)声明
在这里插入图片描述变量类型就是数据库字段类型:INT、BIGINT、CHAR、VARCHAR、DATE、TIME等。

(2)赋值
在这里插入图片描述(3)参数

参数的类型,主要分为以下三种:IN、OUT、INOUT。 具体的含义如下:

在这里插入图片描述用法:
在这里插入图片描述
(4)if

if 用于做条件判断,具体的语法结构为:
在这里插入图片描述
在if条件判断的结构中,ELSE IF 结构可以有多个,也可以没有。 ELSE结构可以有,也可以没有。

3.3 存储过程的优点

1) 存储过程是预编译过的,执行效率高。

2) 存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。

3) 安全性高,执行存储过程需要有一定权限的用户。

4) 存储过程可以重复使用,减少数据库开发人员的工作量。

3.4 存储过程的缺点

1) 调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

2) 移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

3) 重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

4) 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了, 如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:56:33  更:2022-07-20 18:59:01 
 
开发: 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年5日历 -2024/5/20 2:42:49-

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