存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

可以理解为使用 SQL 进行编程,可以被数据库自己调用或者第三方程序(Java、Python、Bash 等)调用。

优势

效率性

存储过程编译一次后,就会存到数据库,每次调用时都直接执行。

安全性

完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。

复用性

存储过程往往是针对特定的功能编写的,可以重复调用。

可维护性

当功能要求发生小的变化时,修改存储过程即可。

降低网络流量

存储过程编译好会放在数据库,远程调用时,不用传输大量 SQL 语句。

操作

语法

1
2
3
4
5
6
7
8
9
delimiter $$
#创建存储过程
CREATE PROCEDURE name()
BEGIN
SQL;
END;$$
delimiter ;
#调用存储过程
CALL name();

触发器

MySQL 触发器(Trigger)是一种特殊的存储过程,用来实现数据约束,数据验证,数据复制等功能;当表上的操作(INSERT、UPDATE、DELETE)发生时,触发器会自动执行。

1
2
3
4
5
6
7
8
DROP TRIGGER IF EXISTS name;
delimiter $$
#创建触发器
CREATE TRIGGER name AFTER/BEFOR INSERT ON table FOR EACH ROW
BEGIN
SQL;
END;$$
delimiter ;