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 局部变量名;
相关推荐
Maiko Star5 小时前
MySQL管理
数据库·mysql·oracle
?333335 小时前
vulnhub靶场-jangow-01-1.0.1(截止至获取shell)
linux·数据库·mysql·安全·网络安全
m0_748245745 小时前
MySQL root用户密码忘记怎么办(Reset root account password)
数据库·mysql·adb
陶然同学6 小时前
【畅购商城】微信支付之支付回调和支付状态
java·mysql·微信·springcloud
m0_748244838 小时前
【MySQL】表的约束
数据库·mysql·性能优化
赛丽曼10 小时前
MySQL-数据库,数据表备份
数据库·mysql·oracle
陶然同学11 小时前
【畅购商城】微信支付之支付模块
java·spring boot·后端·mysql·微信
是谢添啊11 小时前
Shell 脚本 + cron 定时备份 Docker MySQL
mysql·docker·shell·cron·定时备份
m0_7482400211 小时前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
firepation12 小时前
基于 SpringBoot微信小程序的医院预约挂号系统
java·spring boot·mysql·源码·课程设计