储存进程.md【分分快三全天计划网站】

作者:分分快三全天计划网站

一. 概述 

 存款和储蓄进程和函数是优先经过编写翻译并蕴藏在数据库中的一段sql语句集结,能够简化使用开荒职员的众多做事,减少多少在数据库与应用服务器之间的传导,提升多少处理功效是有实益的。存款和储蓄进度和函数的界别在于函数必得有再次来到值,存款和储蓄进度的参数能够应用in,out ,inout类型,而函数参数只可以是in类型。 创制要求create routine 权限, 修改删除需求alter routine权限,施行须求execute权限。

  1.1 创设存款和储蓄进度,调用,删除

-- 创建
DELIMITER $$
CREATE PROCEDURE proc_city(IN city_id INT ,OUT num INT)
READS SQL DATA
BEGIN
    --  要设置初始值,不然为null 与sqlserver一样
    SET num=0;
    SELECT * FROM city WHERE city.city_id=city_id;
    SET num=num 1;
END $$
DELIMITER ;

 --  调用
CALL proc_city (2,@num); SELECT @num;

分分快三全天计划网站 1分分快三全天计划网站 2

-- 删除
DROP  PROCEDURE proc_city

  特征值介绍:
  CREATE PROCEDURE proc_name()
    { contains sql | no sql | READS SQL DATA | modifies sql data}
  这几个特征值只是提需要服务器,并不曾依附那一个特点值来约束进度实际上行使数据的意况。 contains sql 表示子程序不包含读或写多少的说话。no sql表示子程序不带有sql 语句。 READS SQL DATA:表示子程序包涵数据的话语,但不分包写多少。modifies sql data 表示子程序满含写多少。私下认可是contains sql。

  1.2 创设函数,调用,删除

-- 创建
SET GLOBAL log_bin_trust_function_creators=TRUE;
DELIMITER $$
CREATE FUNCTION fn_city (city_count INT)
RETURNS INT 
BEGIN
DECLARE  city_count1 INT;
    --  要设置初始值,
    SET city_count1=0;
    SET  city_count1=city_count 1;
    RETURN city_count1;
END $$
DELIMITER ;

-- 调用
SELECT  fn_city (2);

分分快三全天计划网站 3

-- 删除
DROP FUNCTION fn_city

  1.3 查看新闻

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='proc_city' OR  ROUTINE_NAME='fn_city'

分分快三全天计划网站 4

  1.4 变量的施用

DELIMITER $$
CREATE PROCEDURE proc_demo_declare()
READS SQL DATA
BEGIN
    -- 定义 
    DECLARE i INT ;
    -- 赋值
    SET i=10;
    SELECT i;
    -- 第二种赋值
    SELECT COUNT(1) INTO i  FROM city;
    SELECT i;
END $$
DELIMITER ;

call proc_demo_declare;

      分分快三全天计划网站 5    分分快三全天计划网站 6

1.5 定义Handler境遇难题的拍卖步骤

--  语法
DECLARE
{EXIT | CONTINUE}
HANDLER FOR
{error-number | SQLSTATE error-STRING | CONDITION}
SQL statement

  (1) 管理项目{EXIT | CONTINUE} continue: 当蒙受实行错误时,跳过三番五次上边包车型客车言辞。exit: 当蒙受实施错误时,停止语句
  (2) 触发条件 (SQLSTATE,MYSQL E奥德赛ROEvoque,CONDITION)MYSQL错误代码。ANSI-standard SQLSTATE code。命名准绳。可应用系统内置的SQLEXCEPTION,SQLWA凯雷德NING和NOT FOUND。
  (3)错误触发的操作。

--   以continue为例
DELIMITER $$
CREATE PROCEDURE proc_demo_handler_continue()
BEGIN
    -- 定义条件 continue : 当遇到执行错误时,跳过继续下面的语句
    DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;    

    -- 这条可以插入
    INSERT INTO  city(country_id,cityname,Citycode) VALUES(2,'中国','cn4');
    SET @x=1;

    -- 这条不能插入,外键约束fk_city_country
    INSERT INTO  city(country_id,cityname,Citycode) VALUES(8,'中国','cn5');
    SET @x=2;

    -- 这条可以插入
    INSERT INTO city(country_id,cityname,Citycode) VALUES(2,'中国','cn6');
    SET @x=3;
END $$
DELIMITER ;

-- 调用 
CALL proc_demo_handler_continue; SELECT @x,@x2;

  使用了continue: 当境遇实行错误时,跳过接二连三上边包车型地铁口舌,三条语句,只插入成功二条成功

分分快三全天计划网站 7

  

--  以exit为例
DELIMITER $$
CREATE PROCEDURE proc_demo_handler_exit()
BEGIN
    -- 定义条件  : 当遇到执行错误时,停止语句  
    DECLARE EXIT HANDLER FOR SQLSTATE '23000' SET @x2 = 1;    

    -- 这条可以插入
    INSERT INTO  city(country_id,cityname,Citycode) VALUES(2,'中国','cn4');
    SET @x=1;

    -- 这条不能插入,外键约束fk_city_country
    INSERT INTO  city(country_id,cityname,Citycode) VALUES(8,'中国','cn5');
    SET @x=2;
    --  这条不可以插入
    INSERT INTO city(country_id,cityname,Citycode) VALUES(2,'中国','cn6');
    SET @x=3;
END $$
DELIMITER ;

-- 调用
CALL proc_demo_handler_exit;SELECT @x,@x2;

  使用了exit: 当遭逢实施错误时,结束语句, 三条语句,只插入成功首先条

分分快三全天计划网站 8

 

开采光标

open cursor_name

赋值

  • set var_name = expr

例子

CREATE DEFINER = `cdz`@`localhost` PROCEDURE `live_db`.`<function_name>`(IN i_platform_id int)

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT '两小时统计一次作品数量'

BEGIN

    declare v_user_id  int default 0;

    declare stop int default 0;

    declare v_art_count int default 0;

    declare cur_ingkee cursor for (select distinct userId from newmedia_ingkee_art where updateTime >= date_sub(now(), interval 122 MINUTE));

    declare cur_yy cursor for (select distinct userId from newmedia_yy_art where updateTime >= date_sub(now(), interval 122 MINUTE));

    declare CONTINUE HANDLER FOR SQLSTATE '02000'SET stop = null;

    if i_platform_id=1 THEN

        open cur_ingkee;

        fetch cur_ingkee into v_user_id;

        while (stop is not null) DO

            select count(*) into v_art_count from newmedia_ingkee_art where userId = v_user_id;

            update newmedia_wanghong_users 

            set postCount = v_art_count

            where userId = v_user_id and platformId = i_platform_id;

            fetch cur_ingkee into v_user_id;

        end while;

    elseif i_platform_id=3 THEN

        open cur_yy;

        fetch cur_yy into v_user_id;

        while (stop is not null) DO

            select count(*) into v_art_count from newmedia_yy_art where userId = v_user_id;

            update newmedia_wanghong_users 

            set postCount = v_art_count

            where userId = v_user_id and platformId = i_platform_id;

            fetch cur_yy into v_user_id;

        end while;

    end if;

    commit;

end

赢得记录

fetch cursor_name into var_name,[var_name]...

DETERMINISTIC

每趟调用存款和储蓄进程结果是或不是规定的

SQL Data Access

该表明只是提供一些消息,并不会约束实际存款和储蓄进程的实行景况

  • CONTAINS SQL:未知(实验可以读写不会出题目)。

  • NO SQL:表示子程序不含有SQL语句。

  • READS SQL DATA:表示子程序包括读数据的讲话,但不带有写多少的语句。

  • MODIFIES SQL DATA:表示子程序蕴涵写多少的话语。

  • CONTAINS SQL 网络绝大比很多的素材都表达是满含sql数据,不带有读写的言语, 以为自个儿就冲突,怎会有不包括读写语句的囤积进程,那要存款和储蓄进程做什么样,未有找到官方网站的文书档案,暗许就用contains sql不会出难题

参数表达

definer 定义者

阐明存款和储蓄进程的定义者,只是表明存款和储蓄进程的定义者,跟施行权限关系一点都不大

概念准绳

declare condition_name(自定义错误类似) condition for condition_value
condition_value:

  • sqlstate [value] sqlstate_value
  • mysql_error_code

光标的施用

巡回获取光标的值

宣称光标

declare cursor_name cursor for select_statement

闭馆光标

close cursor_name

概念处理

declare handler_type handler for condition_value sp_statement;
handler_type:

  • continue
  • exit
  • undo (要询问版本是或不是支持)
    condition_value(即定义法规定义的称谓):
  • SQLSTATE [value] sqlstate_value
  • condition_name
  • SQLWA凯雷德NING(sqlstate 以01方始的一部分)
  • NOT FOUND(sqlstate 以02发端的有的)
  • SQLEXCEPTION
  • mysql_error_code

概念准绳和拍卖

SQL Security

  • sql secuirty的值决定了调用存储进程的格局,取值 :definer或然invoker
  1. definer 钦赐子程序该用创立子程序者的权柄来实施

  2. invoker 使用调用者的权位来执行

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 mysql