存储过程和函数是在数据库中定义一些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. oracle数据连接出现 login denied 问题
  2. 用javascript实现简单的物质(密度)分布图
  3. oracle安装实训心得,oracle数据库实训心得.docx
  4. boost::array用法的测试程序
  5. 最大化窗口设置_BetterTouchTool的几个实用设置
  6. java基础----Date、DateFormat
  7. Example3_1
  8. 静态页面被拦截解决办法
  9. NGenerics算法库是学习的好代码
  10. 无序列表圆点变空心_前端HTML -- 列表标签
  11. 用user-selection实现让页面上的内容不能被选中
  12. CROSS APPLY 和 OUTER APPLY 函数
  13. android备份apk,无需手机助手,ABI帮你安装/备份安卓APK
  14. 虾皮「光速大裁员」:7分钟大会后,软件瞬间查无此人
  15. linux at91看门狗驱动设置
  16. 树的四种遍历 先序 中序 后序 层次
  17. 虚拟机终端输入sudo的密码时,无法输入密码
  18. Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑
  19. htmldd隐藏,如何在隐藏“dd”后隐藏“dd”
  20. 蓝桥试题 算法训练 天数计算 JAVA

热门文章

  1. leetcode刷题 66 67
  2. 前端利用JS导出数据到Excel表 数字是文本类型 无法计算
  3. CVPR 2022 | 华为诺亚北大提出量子启发MLP,性能超越Swin Transfomer
  4. ICLR 2020:从去噪自编码器到生成模型
  5. 能量视角下的GAN模型(二):GAN=“分析”+“采样”
  6. 让你的文字被很多很多人看到,喜欢我们不如加入我们 | 作者招募
  7. 亚马逊高级应用科学家熊元骏:人类行为理解研究进展 | PhD Talk #19
  8. idea连接nefu练习数据库
  9. java第五章抽象类与接口5.1-5.3 2020.3.27+31
  10. 深度学习如何验证自己的想法