存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在mysql服务器中存储和执行的,可以减少客户端和服务器端的数据传输。

一.创建存储过程和函数

1. 创建存储过程

mysql中创建存储过程的基本形式:

create procedure sp_name([proc_parameter[,…]]) [characteristic…] routine_body;

sp_name:参数是存储过程的名称;

proc_parameter:表示存储过程的参数列表;

characteristic:参数指定存储过程的特性;

routine_body:参数是SQL代码的内容,可以用begin…end来标志SQL代码的开始和结束;

proc_parameter中每个参数由3部分组成。这3部分分别是输入输出类型、参数名称和参数类型。

[in|out|inout] param_name type

in:表示输入参数

out:表示输出参数

inout:表示既可以是输入也可以是输出

param_name:参数是存储过程的参数名称

type:参数指定存储过程的参数类型,该类型可以是mysql数据库的任意数据类型。

characteristic参数有多个取值。取值说明:

language SQL:说明routine_body部分是由SQL语言的语句组成,这也是数据库系统默认的语言。

[not] deterministic:指明存储过程的执行结果是否是确定的。

deterministic:表示结果是确定的,每次执行存储过程时,相同的输入会得到相同的输出。

not deterministic:表示结果是非确定的,相同的输入可能得到不同的输出。默认情况下,结果也是非确定的。

{contains sql|no sql|reads sql data|modifies sql data}:指明子程序使用SQL语句的限制。

contains SQL:表示子程序包含SQL语句,但不包含读或者写数据的语句;

no SQL:表示子程序中不包含SQL语句;

reads SQL data:表示子程序中包含读数据的语句;

modifies sql data:表示子程序中包含写数据的语句。默认情况下,系统会指定为contains SQL。

SQL security{definer|invoker}:指明谁有权限来执行。

definer:表示只有定义者自己才能执行;

invoker:表示调用者可以执行。默认情况下,系统指定的权限是definer。

comment ‘string’:注释信息。

注:创建存储过程时,系统默认指定contains SQL,表示存储过程中使用SQL语句,最好设置为no SQL。而且,存储过程中最好在comment部分对存储过程进行简单的注释,以便以后再阅读存储过程的代码是更加方便。

示例:下面创建一个名为num_from_employee的存储过程。

delimiter &&

create procedure num_from_employee(in emp_id int,out count_num int)

reads sql data

begin

select count(*) into count_num

from employee

where d_id=emp_id;

end &&

注:代码执行完毕,没报错就表示存储过程创建成功;

说明:mysq中默认的语句结束符为分号(;)。存储过程中的SQL语句需要分号来结束。为避免冲突,首先用”delimiter &&”将mysql的技术符设置为&&。最后再用”delimiter;”来将结束符恢复成分号。

创建存储函数

mysql中创建存储函数的语法:

create function sp_name([func_parameter[,…]])

returns type

[characteristic…] routine_body

sp_name:参数是函数的名称;

func_parameter:表示存储函数的参数列表;

returns type:指返回值类型;

characteristic:参数指定存储函数的特性,该参数的取值与存储过程中取值是一样的。

routine_body:参数是SQL代码的内容,可以用begin…end来标志SQL代码的开始和结束。

func_parameter:可以由多个参数组成,其中每个参数由参数名称和参数类型组成,形式:param_name type

其中,param_name 是存储函数的参数名称;

type:参数是指定存储函数的参数类型;

示例:下面创建一个名为name_from_employee的存储函数

create function name_from_employee(emp_id int)

returns varchar(20)

begin

return (select name from employee where num=emp_id);

end

存储函数的名称:name_from_employee;

函数的参数:emp_id;

返回值是varchar类型;

2. 变量的使用

在存储过程和函数中,可以定义和使用变量。可以使用declare关键字定义变量,然后赋值。变量的作用范围是begin…and程序段中。

(1) 定义变量

使用declare关键字定义变量。语法:

declare var_name[,…] type [default value]

declare:声明变量;

var_name:参数是变量的名称(可以同时定义多个变量);

type:指定变量的类型;

default value:子句将变量默认值设置为value,未使用default value时,默认值为null;

示例:declare my_sql int default 10;

(2) 为变量赋值

mysql中set关键字为变量赋值。语法:

set var_name = expr[,var_name=expr]…

set:为变量赋值;

var_name:参数是变量的名称;

expr:参数是赋值表达式;

注:一个set语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号(,)隔开。

示例:为变量my_sql赋值为30;

set my_sql=30;

mysql中还可以用select…into…语句为变量赋值。语法:

select col_name[,…] into var_name[,…] from table_name where condition

col_name:参数表示查询的字段名称;

var_char:参数是变量的名称;

table_name:参数指表的名称;

condition:参数指查询条件;

示例:下面从employee表中查询id为2的记录。将该记录的d_id值赋给my_sql变量。

select d_id into my_sql from employee where id=2;

使用变量_存储过程和函数及变量的使用相关推荐

  1. MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器

    第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...

  2. MySQL06:变量、存储过程和函数、流程控制结构

    6.变量.存储过程和函数.流程控制结构 变量 分类 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 系统变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添 ...

  3. 第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)

    第15章_存储过程与函数 第15章_存储过程与函数 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 2.1 语法分析 2.2 代码举例 3. 调用存储过程 3.1 调用格式 3.2 ...

  4. 变量、存储过程与函数

    变量 分类 系统变量 全局变量 会话变量 自定义变量 用户变量 局部变量 系统变量 变量由系统提供,不是用户定义,属于服务器层面 查看所有的系统变量 SHOW GLOBAL | [SESSION] V ...

  5. Mysql数据库基础知识(五)之:视图、变量、存储过程、函数、流程控制结构

    第一部分:Mysql数据库基础知识(一)之 基础查询----分组查询 第二部分:Mysql数据库基础知识(二)之 连接查询----子查询-----分页查询------union联合查询 第三部分:My ...

  6. mysql基础——变量、存储过程和函数

    目录 一.变量 1.1  基本介绍 1.2  系统变量 1.3  自定义变量 二.存储过程 2.1  基本介绍 2.2  存储过程的创建 2.3  存储过程的删除 2.4  存储过程的查看 2.5  ...

  7. 尚硅谷李玉婷老师MySQL课程--视图、变量、存储过程和函数、流程控制结构

    一.视图 1.视图的创建 CREATE VIEW 视图名 AS 查询语句; 例1: create view myv as select avg(salary),job_id from employee ...

  8. MySQL—变量、存储过程和函数(十一)

    一.变量 1 变量的种类 1.1 系统变量 系统变量一共分为两种:                                     1)全局变量                         ...

  9. python函数对变量的作用_python函数对变量的作用及遵循的原则

    1.全局变量和局部变量 全局变量:指在函数之外定义的变量,一般没有缩进,在程序执行的全过程有效 局部变量:指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在 例如: 1 n=1 #n是 ...

最新文章

  1. Linux 基础学习
  2. 从MyEclipse到IntelliJ IDEA ——让你脱键盘,全键盘操作
  3. hdu1025 Constructing Roads In JGShining#39;s Kingdom(二分+dp)
  4. 将两个数组河滨_两名3岁男孩在河滨公园玩耍迷了路 幸亏被好心人“捡”到
  5. Java中的10颗语法糖
  6. java——自己实现基础的线程池及带有任务数过多拒绝策略、线程池销毁、自动扩充线程数量及闲时自动回收线程等操作的改进版线程池
  7. 宁波理工大学计算机程序设计培训,拼搏在程序设计前列——专访ACM大赛冠军浙江大学宁波理工学院FBH团队...
  8. micro 架构组件介绍
  9. oracle 虚拟机安装mac os,oracle vm virtualbox虚拟机安装mac os x详细图解
  10. 进制转换—任意进制乘法表
  11. npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.
  12. 西游记中四大菩萨的坐骑
  13. 令克软件再推OpenAPI与MAS系统服务,强大引擎赋能券商多元化发展
  14. nn.Flatten()函数详解及示例
  15. 【苹果群发】苹果推iMessage接口筛选应用程序利用密钥箱生成CSR文书
  16. JS:打字游戏_键盘事件监听
  17. 数据分析七种降维方法
  18. T-LESS: An RGB-D Dataset for 6D Pose Estimation of Texture-less Objects
  19. 【C语言中如何表示无穷大】
  20. 敷完面膜后要擦水乳吗_敷完面膜还要擦水乳吗?

热门文章

  1. mysql 笔试题_MySQL笔试题详解(一)(中等难度)
  2. 3个月转行数据分析师,你需要掌握这些内容
  3. 招募 | 贪心科技招募CV、语音分析、联邦学习课程讲师(在线+兼职)
  4. 面向睡眠阶段分类的自适应时空图卷积神经网络
  5. OAG – WhoIsWho 同名消歧竞赛发布 | 10万元奖金双赛道
  6. 下拉菜单实现树状结构_二叉索引树(树状数组)的原理
  7. photon四种同步方式_【Linux】多线程同步的四种方式
  8. SpringMVC的数据响应方式-页面跳转
  9. Spring的事务控制-基于注解的方式
  10. eclipse安装lombok后无法启动解决办法