存储过程
一组为了完成特定功能的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 局部变量名;