MySQL数据库的存储过程

一、存储过程
1、定义:一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行

2、优点:①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
           ②批量处理:SQL+循环,减少流量,也就是“跑批”
      ③统一接口,确保数据的安全

3、>存储过程就是具有名字的一段代码,用来完成一个特定的功能。
   >创建的存储过程保存在数据库的数据字典中。

4、基本创建格式

1 delimiter//    -- 将SQL语句的结束标记设置为//
2 DROP PROCEDURE IF EXISTS testprint; -- 如果存在该名字的存储过程则删除
3 CREATE PROCEDURE testprint() -- 创建一个名字为testprint的存储过程,    -- 括号里面可以传参数:CREATE PROCEDURE mytest(in sid INT,in suid INT)
4 BEGIN    -- 代码部分开始
5 SELECT ‘你好,成都‘ as infos; -- 存储过程的代码部分
6 END;    -- 代码部分结束
7 //    -- 结束标记
8 delimiter; -- 编写编译结束后将SQL语句的结束标记还原

5、调用

 -- 调用无参存储过程
CALL testprint();

-- 调用有参数的存储过程
set @stuid = 1;
SET @subid = 1;
CALL mytest(@stuid,@subid);    

6、存储过程的参数
存储过程可以有0个或多个参数,用于存储过程的定义。
3种参数类型:
   IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
   OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
   INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
建议:>输入值使用in参数;
>返回值使用out参数;
>inout参数就尽量的少用。
例子:
1)、传入学生和科目id ,得到该学生该科目的成绩

 1 delimiter $$
 2 DROP PROCEDURE IF EXISTS mytest;
 3 CREATE PROCEDURE mytest(in sid INT,in suid INT)
 4 BEGIN
 5 UPDATE score SET score.scscore=scscore+5
 6 WHERE score.sid = sid AND score.suid = suid;
 7 END;
 8 $$
 9 delimiter;
10
11 set @stuid = 1;
12 SET @subid = 1;
13 CALL mytest(@stuid,@subid);

2)、-- 传入学生序号,获取显示该学生的姓名

 1 delimiter $$
 2 DROP PROCEDURE IF EXISTS getstuname;
 3 CREATE PROCEDURE getstuname(in sid INT,out stuname VARCHAR(100))
 4 BEGIN
 5 SELECT student.sname into stuname FROM student WHERE student.sid = sid;
 6 END;
 7 $$
 8 delimiter;
 9
10 set @stuid = 2;
11 CALL getstuname(@stuid,@stuname);
12 SELECT @stuid as sid,@stuname AS stuname;

原文地址:https://www.cnblogs.com/shanks-d/p/9359396.html

时间: 2024-10-25 03:56:35

MySQL数据库的存储过程的相关文章

MySQL数据库的存储过程(一)

MySQL数据库的存储过程常规create routinealterexecutesecuritydefiner 在创建存储过程的时候默认是选中相应的数据库(use db_name)所以在编写存储过程时候就不能在存储过程之中编写此语句 delimiter客户端 使用delimiter客户端设置结束符delimiter //主要是为了避免与存储过程中的SQL语句的结束符冲突 创建一个程序或者一个函数create procedure | function 学习存储过程首先我们应该学会最基本的几个操作

mysql数据库执行存储过程问题

今天在mysql数据库中执行一个存储过程,由于没有安装mysql数据连接工具,只好在黑框框里执行然后就遇到下面的问题: 一直说是我的存储过程的语法有问题,但是看了好久都没有看出问题,后来查了一上午资料才发生问题所在: 在mysql中":"会默认为是一句sql语句的结束,所以在使用source命令执行数据库脚本时,遇到":"符号时,数据库会认为你一句sql语句写完了,他会自动执行这句,这时候就出问题了,要解决这个问题可以使用DELIMITER命令来自定义语句的结束标志

MySQL数据库之存储过程与存储函数

1 引言 2 存储过程与存储函数 3 创建与修改存储过程和函数 4 控制语句 5 查看存储过程和函数 6 删除存储过程和函数 7 总结 1 引言 存储过程和存储函数类似于面向对象程序设计语言中的方法,可以简化代码,提高代码的重用性.本文主要介绍如何创建存储过程和存储函数,以及存储过程与函数的使用.修改.删除等操作. 2 存储过程与存储函数 MySQL中提供存储过程与存储函数机制,我们姑且将存储过程和存储函数合称为存储程序.与一般的SQL语句需要先编译然后立即执行不同,存储程序是一组为了完成特定功

Entity Framework访问MySQL数据库的存储过程并获取返回值

一.创建MySql存储过程 1, CREATE PROCEDURE `InsertAlarmInfo`(in businessindex int, in providerindex int, in alarmtype int, in alarmlevel int,in detecttime DateTime, in alarmdescription varchar(50), in alarmphenomenon int, in subBusinessType int, in businessEn

mysql 数据库 简单存储过程游标使用

BEGIN #Routine body goes here... DECLARE no_more_record INT DEFAULT 0; DECLARE TEST_ID INT(20); DECLARE TEST_USERNAME VARCHAR(20); DECLARE TEST_SEX INT(2); DECLARE TEST_ADDRESS VARCHAR(20); DECLARE cur_record CURSOR FOR SELECT id, username,sex,addres

mysql数据库之编码重新设置

最近在使用使用mysql数据库的存储过程的时候,发现一些问题,数据库编码和表格.字段的编码不一致 导致运行的时候出现问题,错误提示:1267 - Illegal mix of collations 通过网上的一些方法解决了数据库系统本身的编码,还有边个的编码,但还是没有解决问题, 然后建表的语句导出来看看: CREATE TABLE `dev_info` ( `id` int(11) NOT NULL AUTO_INCREMENT , `dev_id` int(10) NOT NULL , `d

mysql数据库使用

---恢复内容开始--- C#操作Mysql数据库的存储过程,网址 DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式. 注释:只有值的日期部分参与计算. 实例 例子 1 使用如下 SELECT 语句: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate 结果:1 MySQL是不支持SELECT - INTO语法的,使用INS

mysql数据库创建函数过程

1.创建mysql数据库的存储过程,语句 2.选择执行创建的数据库存储过程即可

MySQL数据库(7)_用户操作与权限管理、视图、存储过程、触发器、基本函数

用户操作与权限管理 MySQL用户操作 创建用户 方法一: CREATE USER语句创建 CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码"; 方法二: INSERT语句创建 INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject) VALUES('用户名','IP地址',password('密码'),'',