mysql中的过程procedure

一、创建过程语法

create procedure 过程名字(参数列表)

begin

  -- SQL语句...

end

-- 创建存储过程
delimiter $$
create procedure my_act()
begin
    select * from goods;
end
$$
delimiter ;

二、查看过程

-- 查看所有过程
show procedure status [like ‘pattern‘];

-- 查看过程创建语句
show create procedure 过程名字;

三、过程调用

-- 过程调用
call 过程名字();

四、过程删除

-- 删除过程
drop procedure 过程名字;

五、过程参数详解
  相比函数,过程的参数多了三种限定修饰符:

  1. in    -- 值传递, 参数可以是数值或变量, 过程内部的修改不会对外部造成影响。

  2. out   -- 引用传递, 参数只能是变量。在使用前变量的数据会被置空。在过程调用结束后, 才会把过程中产生的值传给外部变量。

  3. inout  -- 引用传递, 参数只能是变量. 可以把外部的数据传给内部使用, 内部的修改也会作用到外部。同样是在调用结束后,才会改变外部的值。

  使用方式:create procedure 过程名([in 参数名 参数类型,][out 参数名 参数类型,][inout 参数名, 参数类型])

-- 创建全局变量
set @ga = 1;
set @gb = 2;
set @gc = 3;

-- 过程参数示例
delimiter $$
create procedure pro_demo(in x int, out y int, inout z int)
begin
    -- 查看数据进入过程后的变化
    select x, y, z;    

    -- 修改局部变量的值
    set x = 100;
    set y = 200;
    set z = 300;

    -- 查看局部变量的值
    select x, y, z;

    -- 查看全局变量的值以观察局部变量的修改对全局有没有影响
    select @ga, @gb,@gc;

    -- 修改全局变量的值
    set @ga = ‘a‘;
    set @gb = ‘b‘;
    set @gc = ‘c‘;

    -- 查看调用结束前全局变量的值以观察过程调用结束后对全局变量的改变
    select @ga, @gb, @gc;
end
$$
delimiter ;

-- 调用过程
call pro_demo(@ga, @gb, @gc);

-- 过程调用结束后再次观察全局变量的值
select @ga, @gb, @gc;
时间: 2024-10-21 08:27:39

mysql中的过程procedure的相关文章

详解MYSQL中重命名procedure的一种方法

最近有用到对存储过程(procedure)重命名的功能,在网上找了一下资料都没有讲到在mysql中是如何实现的,当然可以删掉再重建,但是应该有别的方法,在“mysql”这个数据库(自带)中找了一下,发现两张表:func.proc,发现func表是空的,proc表记录了有关procedure和function有关的信息. 尝试对proc表进行更新,重命名成功了! 原文地址:https://www.cnblogs.com/tacatno/p/10921942.html

Mysql中主从复制的原理、配置过程以及实际案例

Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6.7_64位操作系统,并分别在两台服务器上安装mysql.我的IP地址分别为:192.168.1.15/192.168.1.16,这里我定义15为主服务器,16为从服务器.首先,我们编辑主服务器中mysql配置文件.(因我的mysql使用非root用户安装,因此配置文件放在/home/formal/

mysql安转过程中出现的问题! Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exis

net start mysql启动失败,报错信息如上,因缺少mysql这个库 所以跳过 在my.ini中添加 --skip-grant-tables 再启动mysql 然后进入mysql 倒入一个从其他机器中拷贝的mysql.sql 再把my,ini中的--skip-grant-tables注释掉 就可以启动了! mysql安转过程中出现的问题! Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn

Navicat在MySQL中添加外键详细过程

Navicat在MySQL中添加外键详细过程   /** *@author blovedr *功能: Navicat在MySQL中添加外键 *日期: 2018年6月21日   22:42 *注释: 学习数据库MySQL的点点记录, 谢谢网上各位大神分享经验,欢迎各位大神批评指导与交流. */   1. 打开Navicat连接上数据库, 并建立新的数据库:"test": 2. 在数据库"test"中创建两个表"emp"(主表)和"dept

mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// create procedure queryCountByGrade(IN gradenameinput INT(11),OUT counts int(11) begin select count(*) into counts from student where grade = gradename

MYSQL中存储过程的创建,调用及语法

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 第一部分:创建一个简单的无参的存储过程 1 用mysql客户端登入

mysql的储存过程

储存过程可以简单理解为一条或多条SQL语句的集合. 储存过程的操作包括创建储存过程,查看储存过程,更新储存过程和删除储存过程. 1. 创建储存过程 1.1 储存过程语法结构 在MySQL中创建存储过程通过SQL语句CREATE PROCEDURE来实现,其语法形式如下: CREATE PROCEDURE procedure_name([procedure_paramter[,…]]) [characteristic…] routine_body procedure_name参数表示所要创建的储存

MySql中创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 一.MySQL 创建存储过程 "pr_add" 是个简单的

MySQL中进行树状所有子节点的查询【转】

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现. 但很多时候我们无法控制树的深度.这时就需要在MySQL中用存储过程来实现或在你的程序中来实现这个递归.本文讨论一下几种实现的方法.