mysql视图和存储过程

Mysql视图和存储过程


前言

MySQL作为一个强大的关系型数据库管理系统,提供了许多高级功能,其中包括视图、存储过程和函数。这些功能使得数据库的管理和操作变得更加灵活和高效。在本文中,我们将探讨MySQL视图、存储过程和函数的定义、用途以及如何创建和使用它们。

一、MySQL视图

1、什么是MySQL视图?

在 MySQL 里,“视图”有两层含义:

  • 一个是 view。它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。创建视图的语法是 create view … ,而它的查询方法与表一样。

通俗来讲,视图只保存了查询的 SQL 逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条 SQL 查询语句上

  • 另一个是 InnoDB 在实现 MVCC 时用到的一致性读视图,即 consistent read view,用于支持 RC(Read Committed,读提交)和 RR(Repeatable Read,可重复读)隔离级别的实现。

它没有物理结构,作用是事务执行期间用来定义“我能看到什么数据”。

2、MySQL视图的特点

  • 查询数据:视图用于查询和访问数据库中的数据。你可以像查询表一样使用SELECT语句来查询视图,获取符合条件的数据集。
  • 数据修改限制:视图是基于查询结果生成的虚拟表,当你尝试对视图进行修改操作时,可能会受到限制。一般情况下,对视图的修改操作(如INSERT,UPDATE、DELETE)可能会导致底层表的数据修改,但并非所有类型的视图都允许进行修改操作。
  • 数据安全性:使用视图可以控制用户对数据的访问权限。你可以在视图中定义过滤条件、隐藏敏感数据或限制特定的列的访问权限,从而增强数据的安全性。
  • 简化复杂查询:通过创建视图,可以将复杂的查询和联接操作封装到一个视图中。这样可以简化查询语句的编写,并提高查询的可维护性和可重用性。
  • 数据独立性:当底层表的结构发生变化时,视图的定义保持不变。这意味着你可以在底层表修改后继续使用视图,而不需要修改查询语句或应用程序。

总之,MySQL视图被设计用于查询数据,提供了一种虚拟表的机制,具有数据安全性、简化复杂查询和数据独立性等特点。然而,在使用视图时,需要注意其对查询性能的影响以及对修改操作的限制。

3、使用步骤

(1).创建

代码如下(示例):

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

[OR REPLACE] 可不加,除非是想替换某视图

(2).查询

代码如下(示例):

//查看创建视图语句
SHOW CREATE VIEW 视图名称;  //所得的 Create View 列

//查看创建视图结构
DESCRIBE 视图名称;

//查看视图的属性信息
SHOW table status like "视图名称%";

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

//查看视图数据就像查表一样,后面也可以加 where 条件 ( 视图是一种虚拟存在的表 )

(3).修改

代码如下(示例):

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

//SELECT语句内做修改操作
alter view user_1 as select id, name from user where name like "张%";

(4).删除

代码如下(示例):

DROP VIEW [IF EXISTS] 视图名称 

二、MySQL存储过程和函数

1、概念

存储过程(Stored Procedures):存储过程是一组预先编译好的SQL语句集合,它们被存储在数据库中并可以在需要时被调用执行。存储过程可以接受参数并返回结果,使得数据库逻辑可以在数据库服务器上执行,减少了网络通信的开销,并提高了性能和安全性。

思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

特点

  • 封装,复用
  • 可以接收参数,也可以返回数据,(此点有些像一般函数的作用)
  • 减少网络交互,效率提升

函数(Functions):函数是一段可重复使用的SQL代码,它接受输入参数并返回一个值。MySQL提供了许多内置函数,同时也允许用户创建自定义函数。函数可以用于在查询中进行计算、转换数据或执行其他逻辑操作,使得数据库的应用逻辑更加灵活和可扩展。

思想上都很简单,就是数据库 SQL 语言层面的代码封装与重用。

2、对比存储过程和存储函数

在这里插入图片描述
此外,存储函数可以放在查询语句中使用,存储过程不行。反之存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

3、使用

(1)创建存储过程

DELIMITER ///    // 以///作为结束标记

CREATE PROCEDURE 存储过程名称  ([参数列表])  //可以无参
BEGIN 
 SQL 语句;
END ///

DELIMITER ;  // 恢复;为结束标记

(2)存储过程调用

CALL 名称 ([参数]);

(3)存储过程查看

// 库下存储过程有:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'xxx';

// 查看创建语句
SHOW CREATE PROCEDURE 存储过程名称;

// information_schema 查看系统表,条件 routine_schema 指定数据库名字

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

(3)存储过程删除

DROP PROCEDURE [IF EXISTS] 存储过程名称;

存储过程使用起来简单方便,但缺点也是很明显的。
1、可移植性差。存储过程不能跨数据库移植,比如在MySQL、Oracle 和SQL Server里编写的存储过程,在换成其他数据库时都需要重新编写。
2、调试困难。只有少数DBMS支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容易。虽然也有一些第三方工具可以对存储过程进行调试,但要收费。
3、存储过程的版本管理很困难。比如数据表索弓|发生变化了,可能会导致存储过程失效。我们在开发软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦。
4、它不适合高并发的场景。高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方式,而且对可扩展性要求很高,在这种情况下,存储过程会变得难以维护,增加数据库的压力,显然就不适用了。

4、小结

存储过程既方便,也有局限性。很多公司在开发项目选择使用存储过程,对于我们开发人员来说,不论怎样,掌握存储过程都是必备的技能之-。

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值