数据存储过程学习

何为数据存储过程:是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。数据存储过程类似编程中的方法,它有他自己的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名、有存储过程参数,也有返回值。

存储过程的优点:

  • 存储过程增强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存储方法名即可

 

posted @ 2021-03-27 10:31  MaxYong  阅读(142)  评论(0编辑  收藏  举报