以前在网上看到歪国人专门写了本mysql存储过程,感觉很强大啊。刚好最近新项目上优化要用到存储过程,我就把之前的学习笔记整理了一下。最近太忙啊!!!
MySQL stored programs包括存储过程,函数,触发器。
先来看一下官方的定义。
Stored procedures 存储过程
Stored procedures are the most common type of stored program. A stored proce-
dure is a generic program unit that is executed on request and that can accept
multiple input and output parameters.
Stored functions 函数
Stored functions are similar to stored procedures, but their execution results in
the return of a single value. Most importantly, a stored function can be used
within a standard SQL statement, allowing the programmer to effectively extend
the capabilities of the SQL language.
Triggers触发器。
Triggers are stored programs that are activated in response to, or are triggered
by, an activity within the database. Typically, a trigger will be invoked in
response to a DML operation (INSERT, UPDATE, DELETE) against a database table.
Triggers can be used for data validation or for the automation of denormalization.
大概说一下。
存储过程:存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数 据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中。
自定义函数:存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程和函数的区别:
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象。
存储过程就是程序,它是经过语法检查和编译的SQL语句,所以运行特别快。(这就是为啥用存储过程的原因)
触发器:触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行;出于性能和数据安全的原因,项目中基本没有用过触发器。
mysql查看库中所有的存储过程,函数,触发器:
select `name` from mysql.proc where db = ‘your_db_name‘ and `type` = ‘PROCEDURE‘
也可 “show procedure status; //存储过程”
select `name` from mysql.proc where db = ‘your_db_name‘ and `type` = ‘FUNCTION‘ //函数
也可 show function status; //函数
存储过程,对INFORMATION_SCHEMA数据库中的TRIGGERS表查询
mysql>SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G
SHOW TRIGGERS [FROM db_name] [LIKE expr]
SHOW TRIGGERS\G //触发器