MYSQL-存储过程、视图、函数、触发器

存储过程

一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,比一个个执行sql语句效率高,用户通过指定存储过程的名字并给出参数来执行它。参数可以为IN, OUT, 或INOUT

  • 查看

    select * from mysql.proc where type = "PROCEDURE"

  • 例子

    delimiter 定义分割符

    delimiter c r e a t e p r o c e d u r e 存 储 过 程 名 ( i n o u t i n o u t 变 量 名 数 据 类 型 ) b e g i n s e l e c t ∗ f r o m 表 w h e r e n a m e = 变 量 名 e n d ; create procedure 存储过程名(in out inout 变量名 数据类型) begin select * from 表 where name = 变量名 end; createprocedure存储过程名(inoutinout变量名数据类型)beginselect∗from表wherename=变量名end;

  • 调用

    call 存储过程名()

  • 删除

    drop procedure 存储过程名

函数

需要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。

  • 查看

    select * from mysql.proc where type = "FUNCTION"

  • 例子

    delimiter c r e a t e f u n c t i o n 函 数 名 ( 变 量 名 数 据 类 型 ) r e t u r n s < 数 据 类 型 > b e g i n r e t u r n ( s e l e c t ∗ f r o m 表 名 w h e r e 字 段 = 值 ) ; e n d ; create function 函数名(变量名 数据类型) returns <数据类型> begin return (select * from 表名 where 字段=值); end; createfunction函数名(变量名数据类型)returns<数据类型>beginreturn(select∗from表名where字段=值);end;

  • 调用

    select 函数名()

  • 删除

    drop function 函数名

视图

视图是存储在数据库中的查询的SQL语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,另一原因是可使复杂的查询易于理解和使用。你可以在这个视图上使用SELECT

  • 查看
    select * from information_schema.VIEWS
  • 例子
    create view 视图名 as select * from 表名
    create or replace view 视图名
  • 删除
    drop view 视图名

触发器

与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

  • 查看
    SELECT * FROM information_schema.triggers;

变量

复制代码
#查看所有全局变量
SHOW GLOBAL VARIABLES;
#查看所有会话变量
SHOW SESSION VARIABLES;

- 变量类型
	- 系统变量
		- 全局系统变量
		- 会话系统变量
		系统变量以 两个"@" 开头,其中"@@global"仅用于标记全局系统变量,"@@session"仅用于标记会话系统变量。"@@"首先标记会话系统变量,如果会话系统变量不存在,则标记全局系统变量。
	- 自定义变量
		- 用户变量
		- 局部变量
		用户变量以 一个"@" 开头

- 变量定义
	- 用户变量
		作用域:当前会话
		定义和使用的地方:会话中的任何地方
		
		SET @用户变量 = 值;
		SELECT 表达式 INTO @用户变量 [FROM 等子句];
	- 局部变量
		只在 BEGIN 和 END 语句块中有效。局部变量只能在 存储过程和函数 中使用
		
		DECLARE 变量名1 变量数据类型 [DEFAULT 变量默认值];
		SELECT 局部变量名;
相关推荐
要开心吖ZSH22 分钟前
处方物流信息同步优化:从 36 秒到亚秒级的踩坑记录
java·数据库·mysql·性能优化
yoothey1 小时前
MySQL 数据库连接池调优实战
数据库·mysql
Tian_Hang2 小时前
Eclipse Mosquitto 安装及介绍
java·运维·服务器·ide·sql·mysql·eclipse
南墙上的石头14 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
执子手 吹散苍茫茫烟波16 小时前
RC 隔离级别下 MySQL InnoDB 死锁典型案例
数据库·mysql
峥无19 小时前
深入理解MySQL事务与MVCC机制
数据库·mysql
要开心吖ZSH1 天前
MVCC 进阶:快照读 vs 当前读、幻读与 Next-Key Lock
java·数据库·sql·mysql·mvcc
万亿少女的梦1681 天前
基于Spring Boot的天空影院电影网站系统设计与实现
java·spring boot·mysql·vue·系统设计
万亿少女的梦1681 天前
基于Spring Boot的社区管理系统设计与实现
java·spring boot·mysql·vue·系统设计
翔云1234561 天前
简单概括主库上 Executed_Gtid_Set 是什么时候更新的
数据库·mysql