何为数据存储过程:是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。数据存储过程类似编程中的方法,它有他自己的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名、有存储过程参数,也有返回值。
存储过程的优点:
- 存储过程增强SQL语言的功能和灵活性
- 保证数据的安全性和完成性
- 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全
- 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性
- 在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能
- 可以降低网络通信量
- 使体现企业规则的运算程序放入数据库服务器中,以便集中控制
存储过程的缺点:
- 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不通。当切换到其他厂商的数据库系统时,需要重写原有的存储过程
- 存储过程的性能调教与撰写,受限于各种数据库系统
一、存储过程的创建和调用
- 存储过程就是具有名字的一段代码,用来完成一个特定的功能
- 创建的存储过程保存在数据库的数据字典中
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body: Valid SQL routine statement [begin_label:] BEGIN [statement_list] …… END [end_label]
创建存储过程
CREATE DEFINER=`cosmo`@`%` PROCEDURE `cosmo`.`removeAccount`(IN `v_account` varchar(64)) BEGIN call clearYygAccount(v_account); # 引用了另一个数据存储过程 delete from ibps_party_unique where ACCOUNT_ = v_account; delete from ibps_party_user where ACCOUNT_ = v_account; END # 实现删除账号功能
{ CALL cosmo.removeAccount(:v_account) }
# 运行,输入要删除的账号
MySQL存储过程中的关键语法
声明语句结束符,可以自定义:
DELIMITER $$ 或 DELIMITER //
声明存储过程:
CREATE PROCEDURE demo_in_parameter(IN p_in int)
存储过程开始和结束符合:
BEGIN .... END
变量赋值:
SET @p_in=1
变量定义:
DECLARE 1_int int unsigned default 4000000;
创建mysql存储过程、存储函数:
create procedure 存储过程名(参数)
存储过程体:
create function 存储函数名(参数)
实例
CREATE DEFINER=`root`@`localhost` PROCEDURE `demo1`.`delete_data`(IN para INT) BEGIN delete from shop_goods_demo where ID_ = para; END # 实现删除ID_值为指定值的行,数据存储过程之间可以互相调用,即在begin和end之间call存储方法名即可