MySQL学习21:初始存储过程

       一存储过程简介

       在学习存储过程之前我们先来看看MySQL数据库中的命令执行流程:


       (1)存储过程

       存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。

       (2)存储过程的优点

       1)增强SQL语句的功能和灵活性。

       2)实现较快的执行速度。

       3)减少网络流量。

       (3)存储过程语法结构解析

       MySQL数据库创建存储过程的语法结构为:

       CREATE [DEFINER = { user | CURRENT_USER} ] PROCEDURE sp_name ([proc_parameter[,...]]) 

[characteristic ...] routine_body;

       proc_parameter代表的含义:

       [ IN | OUT | INOUT ] param_name type

       参数含义:

       1)IN,表示该参数的值必须在调用存储过程时指定。

       2)OUT,表示该参数的值可以被存储过程改变,并且可以返回。

       3)INOUT,表示该参数的值在调用时指定,并且可以被改变和返回。

       (4)存储过程特性

       COMMENT 'string'

       | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} 
       | SQL SECURITY { DEFINER | INVOKER }

       特性释义:

       1)COMMENT:注释。

       2)CONTAINS SQL:包含SQL语句,但不包含读或写数据的语句。

       3)NO SQL:不包含SQL语句。

       4)READS SQL DATA :包含读数据的语句。

       5)MODIFIES SQL DATA:包含写数据的语句。

       6)SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。

       (5)过程体

       1)过程体由合法的SQL语句构成。

       2)过程体可以是任意SQL语句。

       3)过程体如果为复合结构则使用BEGIN...AND语句。

       4)复合结构也可以包含声明、循环和控制结构。

       (6)调用存储过程

       MySQL数据库调用存储过程的语法为:

       1)调用有参数的存储过程

       CALL sp_name([parameter[,...]]);

       2)调用无参数的存储过程

       CALL sp_name[()];

       二创建存储过程

       (1)创建不带参数的存储过程

       创建查询MySQL数据库版本号的存储过程

       CREATE PROCEDURE sp1() SELECT VERSION();

       调用存储过程

       CALL sp1;

       CALL sp1();


       (2)创建带有IN类型参数的存储过程

       DESC users3;

       SELECT * FROM users3;


       创建一个删除数据表中全部记录的存储过程

       修改MySQL句的结束符:

       DELIMITER //

       CREATE PROCEDURE removeUserByID(IN id INT UNSIGNED) BEGIN DELETE FROM users3 WHERE

 id=id; END//

       DELIMITER ;

       调用存储过程

       CALL removeUserByID(3);

       SELECT * FROM users3;


       修改存储过程的语法结构:

       ALTER PROCEDURE sp_name [chatacteristic ...] COMMENT 'string' | { CONTAINS SQL | NO SQL | READS 

SQL DATA | MODIFIES SQL DATA} | SQL SECURITY { DEFINER | INVOKER };

       删除存储过程的语法结构:

       DROP PROCEDURE [IF EXISTS] sp_name;

       删除存储过程例子:

       DROP PROCEDURE removeUserByID;

       重新向users3数据表中插入记录

       INSERT users3 VALUES(NULL,'Tom','123',25,1);

       INSERT users3 VALUES(NULL,'John','223',DEFAULT,0);

       INSERT users3 VALUES(DEFAULT,'Rose','323',25,1);

       INSERT users3 VALUES(DEFAULT,'Paul','123',23,1);

       INSERT users3 VALUES(DEFAULT,'Jord','123',23,1);

       INSERT users3 VALUES(DEFAULT,'Lee','123',23,1);

       INSERT users3 VALUES(DEFAULT,'Jams','123',23,1);

       INSERT users3 VALUES(NULL,'Dave','456',23,0);

       INSERT users3 VALUES(NULL,'Jack','456',24,1);


       创建一个删除数据表中一条记录的存储过程

        DELIMITER //

        CREATE PROCEDURE removeUserByID(IN p_id INT UNSIGNED) BEGIN DELETE FROM users3 WHERE 

id=p_id; END//

       DELIMITER ;

       SELECT * FROM users3;


       调用存储过程

       CALL removeUserByID(12);

       SELECT * FROM users3;


       (3)创建带有IN和OUT类型参数的存储过程

       创建一个删除一条记录并且返回剩余记录总数的存储过程

       DELIMITER //

       CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT 

UNSIGNED) BEGIN DELETE FROM users3 WHERE id=p_id; SELECT count(id) FROM users3 INTO userNums;

 END//

       DELIMITER ;

       SELECT count(id) FROM users3;


       调用存储过程

       CALL removeUserAndReturnUserNums(14,@nums);

       SELECT @nums;


       以@符号开头的字符序列是指用户变量,也就是用户在MySQL客户端定义的变量,一般用在BEGIN AND块中,

对存储过程传入的参数进行声明、定义等。

       (3)创建带有多个OUT类型参数的存储过程

       得到被影响的行数的命令是:SELECT ROW_COUNT():

       创建通过age字段删除记录并且返回删除的记录数和剩余记录数的存储过程

       DELIMITER //

       CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age INT UNSIGNED,OUT deleteUsers 

SMALLINT UNSIGNED,OUT userCounts SMALLINT UNSIGNED) BEGIN DELETE FROM users3 WHERE

 age=p_age; SELECT ROW_COUNT()  INTO deleteUsers; SELECT COUNT(id) FROM users3 INTO userCounts;

 END//

       DELIMITER ;


       SELECT * FROM users3;

       SELECT COUNT(id) FROM users3 WHERE age=23;


       调用存储过程(删除age=23的记录)

       CALL removeUserByAgeAndReturnInfos(23,@a,@b);

       SELECT @a;

       SELECT @b;


       SELECT * FROM users3;

       SELECT @a,@b;


       三存储过程与自定义函数的区别 

       存储过程和自定义函数的区别:

       1)存储过程实现的功能要复杂一些;而函数的针对性更强。

       2)存储过程可以返回多个值;函数只能有一个返回值。

       3)存储过程一般独立的来执行;而函数可以作为其他SQL语句的组成部分来出现。

       使用存储过程注意事项

       1)创建存储过程或者自定义函数时需要通过DELIMITER语句修改定界符。

       2)如果函数体或过程体有多个语句,需要包含在BEIGIN...AND语句块中。

       3)存储过程通过CALL关键字来调用。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【完整课件如下】 MySQL从入门到精通 第01章 初始MySQL(共19页).ppt MySQL从入门到精通 第02章 MySQL的安装与配置(共14页).ppt MySQL从入门到精通 第03章 数据库的基本操作(共11页).ppt MySQL从入门到精通 第04章 数据表的基本操作(共26页).ppt MySQL从入门到精通 第05章 数据类型和运算符(共17页).ppt MySQL从入门到精通 第06章 MySQL函数(共76页).ppt MySQL从入门到精通 第07章 查询数据(共48页).ppt MySQL从入门到精通 第08章 插入、更新与删除数据(共10页).ppt MySQL从入门到精通 第09章 索引(共11页).ppt MySQL从入门到精通 第10章 存储过程和函数(共19页).ppt MySQL从入门到精通 第11章 视图(共20页).ppt MySQL从入门到精通 第12章 触发器(共11页).ppt MySQL从入门到精通 第13章 用户管理(共25页).ppt MySQL从入门到精通 第14章 数据备份与还原(共21页).ppt MySQL从入门到精通 第15章 MySQL日志(共22页).ppt MySQL从入门到精通 第16章 性能优化(共18页).ppt MySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).ppt MySQL从入门到精通 第18章 MySQL Replication(共27页).ppt MySQL从入门到精通 第19章 MySQL Cluster(共49页).ppt MySQL从入门到精通 第20章 PHP操作MySQL数据库(共7页).ppt MySQL从入门到精通 第21MySQL实战-新闻发布系统数据库设计(共6页).ppt MySQL从入门到精通 第22章 MySQL实战-论坛管理系统数据库设计(共6页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值