使用变量_存储过程和函数及变量的使用
存储过程和函数是在数据库中定义一些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;
使用变量_存储过程和函数及变量的使用相关推荐
- MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器
第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...
- MySQL06:变量、存储过程和函数、流程控制结构
6.变量.存储过程和函数.流程控制结构 变量 分类 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 系统变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添 ...
- 第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)
第15章_存储过程与函数 第15章_存储过程与函数 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 2.1 语法分析 2.2 代码举例 3. 调用存储过程 3.1 调用格式 3.2 ...
- 变量、存储过程与函数
变量 分类 系统变量 全局变量 会话变量 自定义变量 用户变量 局部变量 系统变量 变量由系统提供,不是用户定义,属于服务器层面 查看所有的系统变量 SHOW GLOBAL | [SESSION] V ...
- Mysql数据库基础知识(五)之:视图、变量、存储过程、函数、流程控制结构
第一部分:Mysql数据库基础知识(一)之 基础查询----分组查询 第二部分:Mysql数据库基础知识(二)之 连接查询----子查询-----分页查询------union联合查询 第三部分:My ...
- mysql基础——变量、存储过程和函数
目录 一.变量 1.1 基本介绍 1.2 系统变量 1.3 自定义变量 二.存储过程 2.1 基本介绍 2.2 存储过程的创建 2.3 存储过程的删除 2.4 存储过程的查看 2.5 ...
- 尚硅谷李玉婷老师MySQL课程--视图、变量、存储过程和函数、流程控制结构
一.视图 1.视图的创建 CREATE VIEW 视图名 AS 查询语句; 例1: create view myv as select avg(salary),job_id from employee ...
- MySQL—变量、存储过程和函数(十一)
一.变量 1 变量的种类 1.1 系统变量 系统变量一共分为两种: 1)全局变量 ...
- python函数对变量的作用_python函数对变量的作用及遵循的原则
1.全局变量和局部变量 全局变量:指在函数之外定义的变量,一般没有缩进,在程序执行的全过程有效 局部变量:指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在 例如: 1 n=1 #n是 ...
最新文章
- oracle数据连接出现 login denied 问题
- 用javascript实现简单的物质(密度)分布图
- oracle安装实训心得,oracle数据库实训心得.docx
- boost::array用法的测试程序
- 最大化窗口设置_BetterTouchTool的几个实用设置
- java基础----Date、DateFormat
- Example3_1
- 静态页面被拦截解决办法
- NGenerics算法库是学习的好代码
- 无序列表圆点变空心_前端HTML -- 列表标签
- 用user-selection实现让页面上的内容不能被选中
- CROSS APPLY 和 OUTER APPLY 函数
- android备份apk,无需手机助手,ABI帮你安装/备份安卓APK
- 虾皮「光速大裁员」:7分钟大会后,软件瞬间查无此人
- linux at91看门狗驱动设置
- 树的四种遍历 先序 中序 后序 层次
- 虚拟机终端输入sudo的密码时,无法输入密码
- Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑
- htmldd隐藏,如何在隐藏“dd”后隐藏“dd”
- 蓝桥试题 算法训练 天数计算 JAVA
热门文章
- leetcode刷题 66 67
- 前端利用JS导出数据到Excel表 数字是文本类型 无法计算
- CVPR 2022 | 华为诺亚北大提出量子启发MLP,性能超越Swin Transfomer
- ICLR 2020:从去噪自编码器到生成模型
- 能量视角下的GAN模型(二):GAN=“分析”+“采样”
- 让你的文字被很多很多人看到,喜欢我们不如加入我们 | 作者招募
- 亚马逊高级应用科学家熊元骏:人类行为理解研究进展 | PhD Talk #19
- idea连接nefu练习数据库
- java第五章抽象类与接口5.1-5.3 2020.3.27+31
- 深度学习如何验证自己的想法