MySQL存储过程实例教程2
- 格式:doc
- 大小:126.00 KB
- 文档页数:17
存储过程实例讲解嘿,朋友们!今天咱就来讲讲这存储过程。
你说这存储过程啊,就像是一个魔法盒子,里面装满了各种奇妙的代码和逻辑。
想象一下,你有一堆复杂的任务,就像要组装一个超级复杂的模型,零件多得让你眼花缭乱。
这时候,存储过程就出现啦!它把这些零散的代码片段整合在一起,变成一个有组织、有纪律的团队。
比如说,在一个大型的数据库系统里,你可能需要经常执行一些特定的操作,比如查询某些数据、更新某些记录等等。
如果每次都要重新写那些代码,多麻烦呀!但是有了存储过程,就相当于你有了一个专门的工具,只要调用它就可以轻松完成这些任务啦。
它就像是一个经验丰富的大厨,各种食材在它手里就能变成美味佳肴。
它把那些复杂的逻辑和步骤都封装起来,让我们这些使用者不用再去头疼那些细节。
再打个比方,你要去一个很远的地方旅行,你可以选择自己一点点摸索路线,也可以直接找一个专业的导游。
存储过程就是那个导游呀,它熟悉路线,知道哪里有好玩的,哪里要注意。
而且哦,存储过程还很灵活呢!你可以根据自己的需求随时修改它,就像给那个魔法盒子重新布置里面的东西一样。
它能适应各种不同的情况,是不是很厉害?你看,在实际应用中,很多企业都会用到存储过程。
它能提高效率,让整个系统运行得更加顺畅。
就像一辆汽车,有了好的发动机,才能跑得更快更稳嘛。
比如说,在一个电商网站上,处理订单的过程就可以用存储过程来优化。
从下单到发货,这中间有好多步骤呢,要是没有存储过程来帮忙,那得多乱呀!还有啊,在金融系统里,存储过程也发挥着重要的作用。
各种交易的处理、数据的计算,都离不开它呢。
总之,存储过程就像是数据库世界里的一颗璀璨明星,照亮了我们前进的道路。
它让我们的编程工作变得更加轻松、高效,真的是太棒啦!大家可千万别小看它哦,好好去研究研究,你一定会发现它更多的神奇之处的!怎么样,是不是对存储过程有了更深的了解呢?还等什么,赶紧去试试吧!。
存储过程与存储函数概念题1 存储过程与存储函数的概念2 存储过程与存储函数联系与区别实践题在teacher表上创建名为teacher_info1的存储过程,要求:teacher_info1有3个参数。
输入参数为teacher_id和type,输出参数为info。
存储过程的作用是根据编号teacher_id 来查询teacher表中的记录。
如果type的值为1时,将姓名name传给输出参数info;如果type的值为2时,将年龄传给输出参数info;如果type的值为其他值,则返回字符串”Error”。
Teacher表的定义如下所示Teacher表的定义需要插入到teacher表的记录步骤1 创建teacher表并插入记录2 创建存储过程teacher_info13 调用存储过程,teacher_id为2,type为14 删除存储过程。
概念题1 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。
存储过程和函数可以避免开发人员重复的编写相同的SQL 语句。
而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。
2 存储过程与存储函数一样,都是由sql语句和过程式语句所组成的代码片段,并且可以被应用程序和其他sql语句调用。
区别:存储函数不能拥有输出参数,因为存储函数自身就是输出参数;而存储过程可以拥有输出参数。
存储函数可以直接对存储函数进行调用,而不需要使用call语句;而对存储过程的调用,需要使用call语句。
存储函数中必须包含一条return语句,而这条特殊的sql语句不允许包含于存储过程中。
实践题1 CREATE TABLE teacher(id INT(4) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,num INT(10) NOT NULL UNIQUE ,name VARCHAR(20) NOT NULL ,sex VARCHAR(4) NOT NULL ,birthday DATETIME ,address VARCHAR(50));INSERT INTO teacher VALUES(1, 1001, '张三','男' ,'1984-11-08' ,'北京市昌平区');INSERT INTO teacher VALUES(2, 1002, '李四','女' ,'1970-01-21' ,'北京市海淀区') ,(NULL, 1003, '王五','男' ,'1976-10-30' ,'北京市昌平区') ,(NULL, 1004, '赵六','男' ,'1980-06-05' ,'北京市顺义区') ;2 DELIMITER &&CREATE PROCEDUREteacher_info1(IN teacher_id INT, IN type INT,OUT info VARCHAR(20))READS SQL DATABEGINCASE typeWHEN 1 THENSELECT name INTO info FROM teacher WHERE id=teacher_id;WHEN 2 THENSELECT YEAR(NOW())-YEAR(birthday) INTO infoFROM teacher WHERE id=teacher_id;ELSESELECT ‘ERROR’ INTO info;END CASE;END &&DELIMITER ;3 CALL teacher_info1(2,1,@info);SELECT @info;4 DROP PROCEDURE teacher_info1;欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。
存储过程案例
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,用户通过调用存储过程来执行这个程序。
以下是一个简单的存储过程案例:
案例:创建存储过程,根据用户输入的姓名查询员工信息
1. 数据库表结构
假设有一个名为`employees`的表,结构如下:
```sql
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
department VARCHAR(50)
);
```
2. 创建存储过程
```sql
DELIMITER //
CREATE PROCEDURE GetEmployeeInfo(IN empName VARCHAR(50)) BEGIN
SELECT FROM employees WHERE name = empName;
END //
DELIMITER ;
```
3. 调用存储过程
调用上述存储过程,查询名为"John"的员工信息:
```sql
CALL GetEmployeeInfo('John');
```
4. 结果
如果存在名为"John"的员工,则返回该员工的信息;否则返回空结果。
这是一个简单的存储过程示例。
在实际应用中,存储过程可以更复杂,可以包含条件、循环、多个表的联接等操作。
使用存储过程的好处是提高性能、减少网络流量、提高安全性等。
mysql创建存储过程sql语句实例嘿,朋友们!今天咱就来好好唠唠 MySQL 创建存储过程的 SQL 语句实例。
比如说,你想创建一个简单的存储过程来计算两个数的和,那代码就可以像这样:```sqlDELIMITER //CREATE PROCEDURE add_two_numbers(IN num1 INT, IN num2 INT, OUT result INT)BEGINSET result = num1 + num2;END//DELIMITER ;```看,这就创建好啦!这就好像你是个大厨,SQL 语句就是你的食材和调料,你可以用它们烹饪出各种美味的“程序大餐”!再举个例子,假如你要创建一个存储过程来查询某个表中的数据。
哎呀呀,那代码可能长这样:```sqlDELIMITER //CREATE PROCEDURE query_table_data(IN table_name VARCHAR(255))BEGINSELECT * FROM table_name;END//DELIMITER ;```是不是挺神奇的?这就好比你有了一把神奇的钥匙,可以打开数据库这个大宝藏的大门!还有啊,如果要创建一个带条件判断的存储过程呢?那也不难呀!就像这样:```sqlDELIMITER //CREATE PROCEDURE check_condition(IN num INT)BEGINIF num > 10 THENSELECT '大于 10';ELSESELECT '小于等于 10';END IF;END//DELIMITER ;```哇塞,这就像走迷宫一样,根据不同的情况选择不同的道路!总之啊,MySQL 的存储过程就像是一个魔法盒子,你可以用各种SQL 语句来创造出无数奇妙的功能!难道你不想试试自己创造一些厉害的存储过程吗?我的观点就是:MySQL 创建存储过程的 SQL 语句实例真的超级有趣又实用,只要你肯花时间去钻研,就能发现其中的无穷魅力!。
使用MySQL的存储过程实现定时任务和计划引言在软件开发中,定时任务和计划是非常常见的需求。
通过定时任务和计划,我们可以定期执行一些重复性的操作,比如数据备份、数据清理等。
MySQL提供了存储过程来实现这些定时任务和计划,本文将介绍如何使用MySQL的存储过程来实现这些功能。
一、什么是存储过程存储过程是一组预编译的SQL语句的集合,可以作为一个单元整体被数据库管理系统调用和执行。
存储过程可以实现复杂的业务逻辑,并且可以被多个应用程序共享和调用。
二、创建存储过程使用MySQL创建存储过程非常简单,下面以创建一个定时任务为例进行介绍。
首先,我们需要在MySQL中创建一个存储过程,比如我们创建一个名为"task_schedule"的存储过程。
在创建存储过程之前,我们首先需要确保MySQL支持存储过程的功能,可以通过执行以下SQL语句进行检查:```SHOW VARIABLES LIKE 'have_procedure';```如果输出结果中的值是"YES",表示MySQL支持存储过程。
接下来,我们可以使用"CREATE PROCEDURE"语句来创建存储过程。
下面是创建一个名为"task_schedule"的存储过程的示例代码:DELIMITER $$CREATE PROCEDURE task_schedule()BEGIN-- 在此处编写任务执行的逻辑END$$DELIMITER ;```在这个示例代码中,我们使用"DELIMITER"语句来改变分隔符,将其设置为"$$",这是因为存储过程的定义中可能包含多个SQL语句,而分号(";")是SQL语句的默认分隔符,为了避免分号与存储过程代码中的其他分号冲突,我们需要将分隔符改为其他值。
然后,我们使用"CREATE PROCEDURE"语句来创建存储过程,并在BEGIN和END之间编写任务执行的逻辑。
MySQL存储过程实例教程MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致性、高效性、安全性和体系结构等特点,本节将通过具体的实例讲解PHP是如何操纵MySQL存储过程的。
1:存储过程的创建这是一个创建存储过程的实例实例说明为了保证数据的完整性、一致性,提高应用的性能,常采用存储过程技术。
MySQL 5.0之前的版本并不支持存储过程,随着MySQL技术的日趋完善,存储过程将在以后的项目中得到广泛的应用。
本实例将介绍在MySQL 5.0以后的版本中创建存储过程。
技术要点一个存储过程包括名字、参数列表,以及可以包括很多SQL语句的SQL语句集。
下面为一个存储过程的定义过程: create procedure proc_name (in parameterinteger)begindeclare variable varchar(20);if parameter=1 thensetvariable='MySQL';elseset variable='PHP';end if;insert into tb (name) values (variable);end;MySQL中存储过程的建立以关键字create procedure开始,后面紧跟存储过程的名称和参数。
MySQL的存储过程名称不区分大小写,例如PROCE1()和proce1()代表同一个存储过程名。
存储过程名不能与MySQL数据库中的内建函数重名。
存储过程的参数一般由3部分组成。
第一部分可以是in、out或inout。
in表示向存储过程中传入参数;out表示向外传出参数;inout表示定义的参数可传入存储过程,并可以被存储过程修改后传出存储过程,存储过程默认为传入参数,所以参数in可以省略。
第二部分为参数名。
第三部分为参数的类型,该类型为MySQL数据库中所有可用的字段类型,如果有多个参数,参数之间可以用逗号进行分割。
MySQL存储过程实例详解```CREATE PROCEDURE procedure_name ([IN , OUT , INOUT] parameter datatype)[MODIFIESSQLDATA]BEGIN--声明和执行多个SQL语句END;```其中,procedure_name是存储过程的名称,datatype是参数的数据类型。
参数可以是IN参数(只能输入)、OUT参数(只能输出)或INOUT 参数(可读写输入和输出)。
MODIFIES SQL DATA子句用于指定存储过程是否会改变数据库中的数据。
下面是一个简单的MySQL存储过程示例,该存储过程接受一个IN参数,并在employees表中插入一条新记录:```sqlCREATE PROCEDURE add_employee(IN name VARCHAR(50))BEGININSERT INTO employees (name) VALUES (name);SELECT 'Employee added successfully' AS message;END;```在这个示例中,我们创建了一个名为`add_employee`的存储过程,并使用`IN`参数`name`作为输入。
存储过程将传递的参数插入到`employees`表中,并返回一条消息。
我们可以像调用函数一样调用存储过程:```sqlCALL add_employee('John Doe');```这将执行存储过程,并将`'John Doe'`作为参数传递给存储过程。
存储过程还可以具有多个参数,并且可以使用控制结构(如IF语句和循环)来实现更复杂的逻辑。
例如,下面是一个存储过程示例,将工资增加的百分比作为IN参数,并将增加的过程应用于`employees`表的所有记录:```sqlCREATE PROCEDURE increase_salary(IN percentage DECIMAL(5,2)) BEGINDECLARE done INT DEFAULT FALSE;DECLARE emp_name VARCHAR(50);--声明一个游标来获取员工名称DECLARE cur CURSOR FOR SELECT name FROM employees;--声明异常处理程序DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;--打开游标OPEN cur;--循环遍历所有记录read_loop: LOOP--获取下一个记录FETCH cur INTO emp_name;IF done THENLEAVE read_loop;ENDIF;--更新工资UPDATE employees SET salary = salary * (1 + percentage) WHERE name = emp_name;ENDLOOP;--关闭游标CLOSE cur;SELECT 'Salaries have been increased successfully' AS message;END;```以上示例中,我们创建了一个名为`increase_salary`的存储过程,并在参数列表中定义了一个`percentage`参数,它表示工资将增加的百分比。
达梦创建存储过程实例-概述说明以及解释1.引言1.1 概述在信息化和数据化的时代背景下,数据库管理系统(DBMS)成为了管理和存储大量数据的重要工具。
达梦数据库是一种高性能、高安全性的关系型数据库管理系统,它提供了一系列强大的功能和工具,用于管理和操作数据库。
存储过程是数据库中一组预定义的SQL语句集合,可以被保存并以后被重复调用。
存储过程使得数据库的开发工作更加灵活和高效,可以通过简单的调用实现复杂的业务逻辑。
达梦数据库也支持创建存储过程,并且为开发人员提供了完善的存储过程开发和管理工具。
本文将以达梦数据库为例,介绍如何创建和使用存储过程。
首先,我们将对存储过程的概念和特点进行简要介绍。
然后,我们将详细讲解如何在达梦数据库中创建存储过程,并通过实例演示不同场景下存储过程的应用。
最后,我们将总结本文的主要内容,并展望存储过程在数据库开发中的未来发展趋势。
通过学习本文,读者将能够深入了解达梦数据库存储过程的基本原理和使用方法,提升数据库开发效率和程序性能,并为今后的数据库应用开发奠定扎实的基础。
1.2 文章结构文章结构部分的内容可以按照以下方式编写:2. 正文2.1 子章节12.1.1 要点12.1.2 要点22.2 子章节22.2.1 要点12.2.2 要点22.3 子章节32.3.1 要点12.3.2 要点2本文主要分为引言、正文和结论三个部分。
其中正文部分包含了三个子章节,分别是子章节1、子章节2和子章节3。
每个子章节下又包含了各自的要点。
通过这种层级结构,使得文章的结构更加清晰明了。
引言部分对文章的整体进行了概述,包括了概述、文章结构和目的三个方面的内容。
正文部分是文章的核心部分,具体展开了对达梦创建存储过程的实例的讲解。
结论部分对全文进行了总结,并对未来展望进行了描述。
这样的结构安排旨在使读者更好地理解文章内容,并能够按照章节的顺序逐步阅读,加深对达梦创建存储过程的理解。
同时,该结构也有助于作者更好地组织和表达思路,使文章更加清晰和条理。
MySQL存储过程的深⼊讲解(in、out、inout)⼀、简介从 5.0 版本才开始⽀持,是⼀组为了完成特定功能的SQL语句集合(封装),⽐传统SQL速度更快、执⾏效率更⾼。
存储过程的优点1、执⾏⼀次后,会将⽣成的⼆进制代码驻留缓冲区(便于下次执⾏),提⾼执⾏效率2、SQL语句加上控制语句的集合,灵活性⾼3、在服务器端存储,客户端调⽤时,降低⽹络负载4、可多次重复被调⽤,可随时修改,不影响客户端调⽤5、可完成所有的数据库操作,也可控制数据库的信息访问权限为什么要⽤存储过程?1.减轻⽹络负载;2.增加安全性⼆、创建存储过程2.1 创建基本过程使⽤create procedure语句创建存储过程存储过程的主体部分,被称为过程体;以begin开始,以end$$结束#声明语句结束符,可以⾃定义:delimiter $$#声明存储过程create procedure 存储过程名(in 参数名参数类型)begin#定义变量declare 变量名变量类型#变量赋值set 变量名 = 值sql 语句1;sql 语句2;...end$$#恢复为原来的语句结束符delimiter ;(有空格)实例:mysql> delimiter $$mysql> create procedure text()-> begin-> select * from stu.a_player;-> end $$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;调⽤存储过程call 存储过程名(实际参数);mysql> call text;+----+----------+-------+| id | name | score |+----+----------+-------+| 1 | zhangsan | 88 || 2 | lisi | 89 || 3 | wangwu | 67 || 4 | zhaoliu | 90 || 5 | xuli | 80 || 6 | keke | 75 |+----+----------+-------+6 rows in set (0.00 sec)删除存储过程mysql> drop procedure text;2.2 存储过程的参数MySQL存储过程的参数⽤在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名数据类形...])IN 输⼊参数:表⽰调⽤者向过程传⼊值(传⼊值可以是字⾯量或变量)OUT 输出参数:表⽰过程向调⽤者传出值(可以返回多个值)(传出值只能是变量)INOUT 输⼊输出参数:既表⽰调⽤者向过程传⼊值,⼜表⽰过程向调⽤者传出值(值只能是变量)传递参数实例:INmysql> create procedure test1(in in_id int(2))-> begin-> select * from stu.a_player where id=in_id;-> end $$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;#将4传递给in_id变量,执⾏事务mysql> call test1(4);+----+---------+-------+| id | name | score |+----+---------+-------+| 4 | zhaoliu | 90 |+----+---------+-------+1 row in set (0.00 sec)#将6传递给in_id变量,执⾏事务mysql> call test1(6);+----+------+-------+| id | name | score |+----+------+-------+| 6 | keke | 75 |+----+------+-------+1 row in set (0.00 sec)OUTmysql> delimiter $$mysql> create procedure test2(out aa int)-> begin-> select aa;-> set aa=2;-> select aa;-> end $$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;#将@aa变量传递给test2 事务mysql> call test2(@aa);+------+| aa |+------+| NULL |+------+#out向调⽤者输出参数,不接收输⼊的参数,所以aa为null1 row in set (0.00 sec)+------+| aa |+------+| 2 |+------+事务将aa变量设置为2(设置的是全局),则可进⾏输出1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> select @aa;+------+| @aa |+------+| 2 |+------+1 row in set (0.00 sec)#事务外查询变量,已经被修改IN 、OUT、 INOUT 对⽐mysql> delimiter //mysql> create procedure test3(in num1 int,out num2 int,inout num3 int)-> begin-> select num1,num2,num3;-> set num1=10,num2=20,num3=30;-> select num1,num2,num3;-> end //Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;mysql> call test3(@num1,@num2,@num3);+------+------+------+| num1 | num2 | num3 |+------+------+------+| 1 | NULL | 3 |+------+------+------+1 row in set (0.00 sec)+------+------+------+| num1 | num2 | num3 |+------+------+------+| 10 | 20 | 30 |+------+------+------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)in和inout参数会将全局变量的值传⼊存储过程中,⽽out参数不会将全局变量的值传⼊存储过程中。
mysqlwhile嵌套_Mysql在存储过程中嵌套while循环在MySQL中,使用存储过程可以实现复杂的逻辑处理和数据操作。
当需要在存储过程中进行多次循环操作时,可以使用嵌套的WHILE循环结构。
WHILE循环是一种基本的循环结构,它会在给定条件为真时执行一系列的语句,直到条件为假为止。
通过将多个WHILE循环嵌套在一起,可以实现更复杂的逻辑控制。
在存储过程中嵌套WHILE循环的一种常见应用是对结果集进行迭代处理。
首先,使用一个外部WHILE循环来遍历结果集,然后在内部WHILE循环中对每一行进行操作。
以下是一个简单的示例,演示了如何在MySQL存储过程中嵌套WHILE循环:DELIMITER$$CREATE PROCEDURE nested_whileBEGINDECLARE done INT DEFAULT FALSE;DECLAREa,bINT;DECLARE cur1 CURSOR FOR SELECT column1 FROM table1;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;--开始外部WHILE循环OPEN cur1;read_loop: LOOPFETCH cur1 INTO a;IF done THENLEAVE read_loop;ENDIF;--在外部WHILE循环中执行一些操作,例如输出当前值SELECTa;--使用内部WHILE循环SETb=0;WHILEb<aDO--在内部WHILE循环中执行一些操作,例如输出当前值SELECTb;SETb=b+1;ENDWHILE;ENDLOOP;CLOSE cur1;END$$DELIMITER;在上述示例中,我们创建了一个名为nested_while的存储过程。
该存储过程使用了两个整型变量a和b,用于存储结果集中的值。
在存储过程中,我们使用了一个游标cur1来获取数据库表table1中的列column1的结果集。
mysql写存储过程循环实例摘要:1.MySQL 存储过程简介2.MySQL 存储过程循环实例a.循环概述b.实例代码c.实例解读3.总结正文:MySQL 存储过程是一种可编程的函数,它在数据库中创建并保存,可以由用户调用执行。
存储过程通常包含SQL 语句和一些特殊的控制结构,用于完成特定的功能。
在某些场景下,我们需要在存储过程中实现循环操作,这时可以使用循环结构。
下面是一个MySQL 存储过程循环实例:```sqlDELIMITER //CREATE PROCEDURE loop_example()BEGINDECLARE i INT DEFAULT 1;DECLARE j INT DEFAULT 10;DECLARE result INT;-- 循环开始WHILE i <= j DOSET result = i * j;SELECT result;SET i = i + 1;END WHILE;-- 循环结束END //DELIMITER ;```在这个例子中,我们创建了一个名为`loop_example`的存储过程,其主要功能是计算1 到10 之间所有数字的乘积。
存储过程使用WHILE 循环结构来实现循环操作。
具体来说,存储过程执行以下操作:1.声明变量`i`和`j`,分别初始化为1 和10,用于表示循环的次数。
2.声明变量`result`,用于存储计算结果。
3.使用WHILE 循环结构,当变量`i`小于等于`j`时,执行循环体。
4.在循环体中,计算`i`和`j`的乘积,并将其存储在变量`result`中。
5.使用SELECT 语句输出变量`result`的值。
6.更新变量`i`的值为`i + 1`,用于进行下一次循环。
7.循环结束后,存储过程返回,不再执行其他操作。
通过这个例子,我们可以看到在MySQL 存储过程中如何使用循环结构来实现特定的功能。
mysql的存储过程和函数MySQL的存储过程和函数是数据库中非常重要的两个概念,它们可以帮助我们更加高效地管理和操作数据库。
在本文中,我们将详细介绍MySQL的存储过程和函数,包括它们的定义、使用方法以及优缺点等方面。
一、MySQL的存储过程1. 定义MySQL的存储过程是一组预编译的SQL语句,它们被存储在数据库中,并可以被多次调用。
存储过程可以接受参数,并且可以返回结果集或者输出参数。
2. 使用方法创建存储过程的语法如下:CREATE PROCEDURE procedure_name ([IN|OUT|INOUT] parameter_name data_type [, ...])BEGIN-- 存储过程的SQL语句END;其中,procedure_name是存储过程的名称,parameter_name是存储过程的参数名称,data_type是参数的数据类型。
IN表示输入参数,OUT表示输出参数,INOUT表示既是输入参数又是输出参数。
调用存储过程的语法如下:CALL procedure_name ([parameter_value, ...]);其中,procedure_name是存储过程的名称,parameter_value是存储过程的参数值。
3. 优缺点存储过程的优点在于:(1)提高了数据库的性能,因为存储过程是预编译的,可以减少SQL语句的解析和编译时间。
(2)提高了数据库的安全性,因为存储过程可以控制对数据库的访问权限。
(3)提高了代码的可维护性,因为存储过程可以被多次调用,可以减少代码的重复性。
存储过程的缺点在于:(1)需要学习存储过程的语法和使用方法。
(2)存储过程的调试和测试比较困难。
二、MySQL的函数1. 定义MySQL的函数是一段预编译的代码,它们可以接受参数,并且可以返回一个值。
函数可以被多次调用,并且可以嵌套使用。
2. 使用方法创建函数的语法如下:CREATE FUNCTION function_name ([parameter_name data_type [, ...]])RETURNS return_typeBEGIN-- 函数的SQL语句END;其中,function_name是函数的名称,parameter_name是函数的参数名称,data_type是参数的数据类型,return_type是函数的返回值类型。
MySQL存储过程传參之in,out,inout參数使⽤⽅法存储过程传參:存储过程的括号中。
能够声明參数。
语法是 create procedure p([in/out/inout] 參数名參数类型 ..)in :给參数传⼊值,定义的參数就得到了值out:模式定义的參数仅仅能在过程体内部赋值。
表⽰该參数能够将某个值传递回调⽤他的过程(在存储过程内部。
该參数初始值为 null,不管调⽤者是否给存储过程參数设置值)inout:调⽤者还能够通过 inout 參数传递值给存储过程,也能够从存储过程内部传值给调⽤者假设只想把数据传给 MySQL 存储过程,那就使⽤“in” 类型參数。
假设只从 MySQL 存储过程返回值,那就使⽤“out” 类型參数;假设须要把数据传给 MySQL 存储过程,还要经过⼀些计算后再传回给我们,此时,要使⽤“inout” 类型參数。
MySQL 存储过程參数假设不显式指定"in"、"out"、"inout",则默觉得"in"。
实例⼀:存储过程传參 inDELIMITER $$CREATE PROCEDURE p1(IN num INT)BEGINDECLARE i INT DEFAULT 0;DECLARE total INT DEFAULT 0;WHILE i<=num DOSET total := i + total;SET i := i+1;END WHILE;SELECT total;END$$实例⼆:存储过程传參 outCREATE PROCEDURE p2(OUT num INT)BEGINSELECT num AS num_1;IF (num IS NOT NULL) THENSET num = num + 1;SELECT num AS num_2;ELSESELECT 1 INTO num;END IF;SELECT num AS num_3;END$$SET @num = 10$$CALL p2(@num)$$SELECT @num AS num_out$$实例三:存储过程传參 inoutCREATE PROCEDURE p3(INOUT age INT)BEGINSET age := age + 20;END$$set @currage =18$$call p3(@currage)$$select @currage$$。
如何在MySQL中执行存储过程?在 MySQL 中,存储过程是一组预编译的 SQL 语句集合,它们被存储在数据库服务器中,并可以被反复调用执行,从而提高数据库操作的效率和可维护性。
那么,如何在 MySQL 中执行存储过程呢?下面就让我们一起来详细了解一下。
首先,我们需要创建一个存储过程。
创建存储过程使用`CREATE PROCEDURE` 语句。
假设我们要创建一个简单的存储过程,用于计算两个数的和,以下是示例代码:```sqlDELIMITER //CREATE PROCEDURE add_numbers(IN num1 INT, IN num2 INT, OUT result INT)BEGINSET result = num1 + num2;END //DELIMITER ;```在上述代码中,`DELIMITER //`用于更改默认的语句结束符,因为存储过程体中可能包含`;`,为了避免混淆,我们先更改结束符。
`IN` 表示输入参数,`OUT` 表示输出参数。
创建好存储过程后,接下来就是执行它。
执行存储过程有多种方式。
一种常见的方式是使用`CALL` 语句。
例如,对于刚刚创建的计算两数之和的存储过程,我们可以这样执行:```sqlCALL add_numbers(5, 10, @result);SELECT @result;```在上述执行语句中,`@result` 是用户定义的变量,用于存储存储过程的输出结果。
另外,我们还可以在其他存储过程中调用已创建的存储过程。
这在复杂的数据库操作中非常有用,可以将大的任务分解为多个小的可重用的存储过程。
在执行存储过程时,需要注意一些事项。
参数的传递要准确无误。
输入参数的值必须符合存储过程中定义的数据类型和范围。
如果传递了错误类型或超出范围的值,可能会导致执行错误。
同时,要注意存储过程的权限问题。
只有具有足够权限的用户才能执行存储过程。
如果权限不足,可能会遇到执行失败的情况。
mysql创建存储过程案例MySQL创建存储过程是数据库管理中一个非常重要的技能,可以极大地简化我们对数据的操作。
下面,我将通过一个案例来详细说明如何使用MySQL创建存储过程。
案例:假设我们有一个用户数据表users,包含以下字段:id, username, password, email, create_time。
现在我们需要创建一个存储过程,根据用户名和密码查询用户信息,如果找到对应的用户,则返回用户信息,否则返回NULL。
步骤:第一步,打开MySQL客户端,连接到数据库。
第二步,创建一个存储过程,语法格式如下:CREATE PROCEDURE procedure_name (IN param1 datatype1, IN param2 datatype2, ...)BEGIN-- sql statementsEND;其中,procedure_name是存储过程名称,param1、param2等则是输入参数,datatype1、datatype2则是参数的数据类型。
在我们的案例中,存储过程名称为sp_get_user_info,输入参数为username和password,数据类型均为VARCHAR。
那么我们的创建过程语句如下:CREATE PROCEDURE `sp_get_user_info` (IN `username` VARCHAR(50), IN `password` VARCHAR(50))BEGINSELECT * FROM `users` WHERE `username`=username AND`password`=password;END;第三步,执行存储过程。
执行存储过程可以使用CALL语句,语法格式如下:CALL procedure_name(param1, param2, ...);在我们的案例中,执行语句如下:CALL `sp_get_user_info`('test', '123456');该语句会根据用户名test和密码123456去查询用户表users,如果找到对应的用户,则返回用户信息。
mysql存数组的实例代码和⽅法在很多的情况下,在编写存储过程中往往会⽤到数组,但是mysql中存储过程传⼊参数并没有可以直接传⼊数组的⽅法。
在这种情况下我们只能退⽽求之或者说换个⽅式以字符串形式传⼊参数,然后在过程体中把字符串再转成数组?不过很遗憾告诉你,mysql并没有直接提供把字符串转数组的函数。
现在你是不是有种想打⼈的感觉呢?不过,不⽤慌,此路不通,咱⾛另外的路,总有解决⽅法的。
我们可以把传⼊的字符串截取成多个字符然后传⼊到临时表中,然后使⽤游标或者直接关联表过滤数据。
这样就可以达到后⾯预期的效果了。
下⾯我们以⼀个例⼦来具体实践⼀下:1、创建数据库,⽤于实例:CREATE DATABASE huafeng_db;use huafeng_db;DROP TABLE IF EXISTS `huafeng_db`.`t_scores`;DROP TABLE IF EXISTS `huafeng_db`.`t_students`;DROP TABLE IF EXISTS `huafeng_db`.`t_class`;CREATE TABLE `huafeng_db`.`t_class` ( `class_id` int(11) NOT NULL, `class_name` varchar(32) CHARACTER SET utf8 DEFAULT NULL,PRIMARY KEY (`class_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('1', '⼀年级');INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('2', '⼆年级');INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('3', '三年级');INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('4', '四年级');INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('5', '五年级');INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('6', '六年级');CREATE TABLE `t_students` ( `student_id` int(11) NOT NULL AUTO_INCREMENT, `student_name` varchar(32) NOT NULL, `sex` int(1) DEFAULT NULL, `seq_no` int(11) DEFAULT NULL, `class_id` int(11) NOT NULL, PRIMARY KEY (`student_id`),KEY `class_id` (`class_id`),CONSTRAINT `t_students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('⼩红',0,1,'1');INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('⼩青',0,2,'2');INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('⼩明',1,3,'3');INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('⼩兰',0,4,'4');INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('⼩⽶',1,5,'5');INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('⼩⽩',1,6,'6');CREATE TABLE `huafeng_db`.`t_scores` ( `score_id` int(11) NOT NULL AUTO_INCREMENT, `course_name` varchar(64) DEFAULT NULL, `score` double(3,2) DEFAULT NULL, `student_id` int(11) DEFAULT NULL,PRIMARY KEY (`score_id`),KEY `student_id` (`student_id`),CONSTRAINT `t_scores_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `t_students` (`student_id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('1', '语⽂', '90', '1');INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('2', '数学', '97', '1');INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('3', '英语', '95', '1');INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('4', '语⽂', '92', '2');INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('5', '数学', '100', '2');INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('6', '英语', '98', '2');2、需求:根据学⽣编号批量删除学⽣信息DROP PROCEDURE IF EXISTS `p_del_studentInfo_bySeqNo`;DELIMITER $$CREATE PROCEDURE p_del_studentInfo_bySeqNo(IN arrayStr VARCHAR(1000),IN sSplit VARCHAR(10))SQL SECURITY INVOKER #允许其他⽤户运⾏BEGIN DECLARE e_code INT DEFAULT 0;#初始化报错码为0DECLARE result VARCHAR(256) CHARACTER set utf8;#初始化返回结果,解决中⽂乱码问题DECLARE arrLength INT DEFAULT 0;/*定义数组长度*/DECLARE arrString VARCHAR(1000);/*定义初始数组字符*/DECLARE sStr VARCHAR(1000);/*定义初始字符*/DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET e_code=1;#遇到错误后继续执⾏;(需要返回执⾏结果时⽤这个)START TRANSACTION;#启动事务SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));/*获得数组长度*/SET arrString = arrayStr;DROP TEMPORARY TABLE IF EXISTS list_tmp;create temporary table list_tmp(id VARCHAR(32));/*定义临时表*/WHILE arrLength > 0 DOset sStr = substr(arrString,1,instr(arrString,sSplit)-1); -- 得到分隔符前⾯的字符串set arrString = substr(arrString,length(sStr)+length(sSplit)+1); -- 得到分隔符后⾯的字符串set arrLength = arrLength -1;set @str = trim(sStr);insert into list_tmp(id) values(@str);END WHILE; IF row_count()=0 THENSET e_code = 1;SET result = '请输⼊正确的参数';END IF;set @count = (SELECT count(1) FROM t_students s,list_tmp t WHERE s.seq_no = t.id); IF @count >0 THENDELETE FROM t_scores WHERE student_id in (SELECT s.student_id FROM t_students s,list_tmp t WHERE s.seq_no = t.id);DELETE FROM t_students WHERE student_id in (SELECT t.id FROM list_tmp t); ELSESET e_code = 1;SET result = '该学⽣不存在!';END IF; IF e_code=1 THENROLLBACK; #回滚ELSECOMMIT;SET result = '该学⽣已被删除成功';END IF;SELECT result;DROP TEMPORARY TABLE IF EXISTS list_tmp;END $$DELIMITER ;说明:在创建存储过程的时候,传⼊了两个参数,第⼀个代表要传⼊的数组字符串形式,第⼆个参数为以什么分割字符串。
如何在MySQL中创建和使用临时存储过程MySQL是一种广泛使用的关系型数据库管理系统,可以为用户提供高效、可靠的数据存储和管理。
在MySQL中,存储过程是一种事先编写好的SQL语句集合,可以在需要的时候被调用。
临时存储过程是存储在数据库服务器的内存中,仅在会话期间存在,会话结束后自动清除的存储过程。
本文将介绍如何在MySQL中创建和使用临时存储过程。
一、创建临时存储过程的语法在MySQL中,使用CREATE PROCEDURE语句可以创建存储过程。
其基本语法如下:CREATE PROCEDURE procedure_name ([parameter_list])[characteristic_list] routine_body其中,procedure_name是存储过程的名称,parameter_list是存储过程的输入参数列表,characteristic_list是存储过程的特性列表,routine_body是存储过程内部的SQL语句集合。
二、创建一个简单的临时存储过程下面以一个简单的示例来说明如何创建一个临时存储过程。
假设我们有一个名为Employee的表,其中包含员工的姓名和年龄两列。
我们需要创建一个临时存储过程,用于查询指定年龄以上的员工信息。
首先,我们可以使用以下语句创建一个名为get_employee的临时存储过程:CREATE PROCEDURE get_employee(IN min_age INT)BEGINSELECT * FROM Employee WHERE age >= min_age;END;在上述语句中,我们定义了一个输入参数min_age,然后使用SELECT语句查询满足条件的员工信息。
三、调用临时存储过程在创建临时存储过程后,我们可以使用CALL语句来调用它。
下面是调用get_employee存储过程的示例:CALL get_employee(30);在上述语句中,我们将30作为参数传递给get_employee存储过程,从而查询年龄大于等于30的员工信息。
MySQL存储过程详解1.存储过程简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。
它可以有SQL语句和一些特殊的控制结构组成。
当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。
数据库中的存储过程可以看做是对编程中面向对象方法的模拟。
它允许控制数据的访问方式。
存储过程通常有以下优点:(1).存储过程增强了SQL语言的功能和灵活性。
存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
(2).存储过程允许标准组件是编程。
存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。
而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3).存储过程能实现较快的执行速度。
如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。
因为存储过程是预编译的。
在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。
而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
(4).存储过程能过减少网络流量。
针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
(5).存储过程可被作为一种安全机制来充分利用。
系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
2.关于MySQL的存储过程存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。
好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
3.MySQL存储过程的创建(1). 格式MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]) procedure[特性 ...] 过程体这里先举个例子:1.mysql> DELIMITER //2.mysql> CREATE PROCEDURE proc1(OUT s int)3. -> BEGIN4. -> SELECT COUNT(*) INTO s FROM user;5. -> END6. -> //7.mysql> DELIMITER ;注:(1)这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER 是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
(3)过程体的开始与结束使用BEGIN与END进行标识。
这样,我们的一个MySQL存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。
(2). 声明分割符其实,关于声明分割符,上面的注解已经写得很清楚,不需要多说,只是稍微要注意一点的是:如果是用MySQL的Administrator管理工具时,可以直接创建,不再需要声明。
(3). 参数MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名数据类形...])IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OUT 输出参数:该值可在存储过程内部被改变,并可返回INOUT 输入输出参数:调用时指定,并且可被改变和返回Ⅰ. IN参数例子创建:1.mysql > DELIMITER //2.mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)3. -> BEGIN4. -> SELECT p_in; /*查询输入参数*/5. -> SET p_in=2; /*修改*/6. -> SELECT p_in; /*查看修改后的值*/7. -> END;8. -> //9.mysql > DELIMITER ;执行结果:1.mysql > SET @p_in=1;2.mysql > CALL demo_in_parameter(@p_in);3.+------+4.| p_in |5.+------+6.| 1 |7.+------+8.9.+------+10.| p_in |11.+------+12.| 2 |13.+------+14.15.mysql> SELECT @p_in;16.+-------+17.| @p_in |18.+-------+19.| 1 |20.+-------+以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值Ⅱ.OUT参数例子创建:1.mysql > DELIMITER //2.mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)3. -> BEGIN4. -> SELECT p_out;/*查看输出参数*/5. -> SET p_out=2;/*修改参数值*/6. -> SELECT p_out;/*看看有否变化*/7. -> END;8. -> //9.mysql > DELIMITER ;执行结果:1.mysql > SET @p_out=1;2.mysql > CALL sp_demo_out_parameter(@p_out);3.+-------+4.| p_out |5.+-------+6.| NULL |7.+-------+8./*未被定义,返回NULL*/9.+-------+10.| p_out |11.+-------+12.| 2 |13.+-------+14.15.mysql> SELECT @p_out;16.+-------+17.| p_out |18.+-------+19.| 2 |20.+-------+Ⅲ. INOUT参数例子创建:1.mysql > DELIMITER //2.mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)3. -> BEGIN4. -> SELECT p_inout;5. -> SET p_inout=2;6. -> SELECT p_inout;7. -> END;8. -> //9.mysql > DELIMITER ;执行结果:1.mysql > SET @p_inout=1;2.mysql > CALL demo_inout_parameter(@p_inout) ;3.+---------+4.| p_inout |5.+---------+6.| 1 |7.+---------+8.9.+---------+10.| p_inout |11.+---------+12.| 2 |13.+---------+14.15.mysql > SELECT @p_inout;16.+----------+17.| @p_inout |18.+----------+19.| 2 |20.+----------+(4). 变量Ⅰ. 变量定义DECLARE variable_name [,variable_name...] datatype [DEFAULT value];其中,datatype为MySQL的数据类型,如:int, float, date, varchar(length)例如:1.DECLARE l_int int unsigned default 4000000;2.DECLARE l_numeric number(8,2) DEFAULT 9.95;3.DECLARE l_date date DEFAULT '1999-12-31';4.DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';5.DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';Ⅱ. 变量赋值SET 变量名 = 表达式值 [,variable_name = expression ...]Ⅲ. 用户变量ⅰ. 在MySQL客户端使用用户变量1.mysql > SELECT 'Hello World' into @x;2.mysql > SELECT @x;3.+-------------+4.| @x |5.+-------------+6.| Hello World |7.+-------------+8.mysql > SET @y='Goodbye Cruel World';9.mysql > SELECT @y;10.+---------------------+11.| @y |12.+---------------------+13.| Goodbye Cruel World |14.+---------------------+15.16.mysql > SET @z=1+2+3;17.mysql > SELECT @z;18.+------+19.| @z |20.+------+21.| 6 |22.+------+ⅱ. 在存储过程中使用用户变量1.mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World');2.mysql > SET @greeting='Hello';3.mysql > CALL GreetWorld( );4.+----------------------------+5.| CONCAT(@greeting,' World') |6.+----------------------------+7.| Hello World |8.+----------------------------+ⅲ. 在存储过程间传递全局范围的用户变量1.mysql> CREATE PROCEDURE p1() SET @last_procedure='p1';2.mysql> CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_proc);3.mysql> CALL p1( );4.mysql> CALL p2( );5.+-----------------------------------------------+6.| CONCAT('Last procedure was ',@last_proc |7.+-----------------------------------------------+8.| Last procedure was p1 |9.+-----------------------------------------------+注意:①用户变量名一般以@开头②滥用用户变量会导致程序难以理解及管理(5). 注释MySQL存储过程可使用两种风格的注释双模杠:--该风格一般用于单行注释c风格:/* 注释内容 */ 一般用于多行注释例如:1.mysql > DELIMITER //2.mysql > CREATE PROCEDURE proc1 --name存储过程名3. -> (IN parameter1 INTEGER) /* parameters参数*/4. -> BEGIN /* start of block语句块头*/5. -> DECLARE variable1 CHAR(10); /* variables变量声明*/6. -> IF parameter1 = 17 THEN /* start of IF IF条件开始*/7. -> SET variable1 = 'birds'; /* assignment赋值*/8. -> ELSE9. -> SET variable1 = 'beasts'; /* assignment赋值*/10. -> END IF; /* end of IF IF结束*/11.-> INSERT INTO table1 VALUES (variable1);/* statement SQL语句*/12. -> END /* end of block语句块结束*/13. -> //14.mysql > DELIMITER ;4.MySQL存储过程的调用用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。