`

MySql存储过程学习笔记

 
阅读更多

 

# 对于MySQL 5.0.45版本,需要重新定义一个输入结束标记符,如:delimiter //

# 在所有的存储过程中使用";"作为每一条语句的结束标记

# 而每一条MySQL语句都必须使用"//"作为结束标记;

drop procedure if exists phelloworld //

create procedure phelloworld()

begin

select 'Hello,World!' as F;

end;

//

 

drop procedure if exists padd //

create procedure padd

(

a int,

b int

)

 

begin

declare c int;

if a is null then

set a = 0;

end if;

if b is null then

set b = 0;

end if;

set c = a + b;

select c as Sum;

end;

//

 

# 使用mysql变量调用存储过程

set @a = 10 //

set @b = 12 //

call padd(@a,@b) //

 

# 直接使用常量值调用存储过程

call padd(11,12) //

 

# 对数据库表进行操作

# 创建表

drop table if exists mapping //

create table mapping (

`cFieldID` smallint(5) unsigned not null,

`cFieldName` varchar(30) not null,

primary key(`cFieldID`)

)Engine=InnoDB default charset=utf8 //

 

insert into mapping values(1,'MarketValue') //

insert into mapping values(2,'P/L') //

insert into mapping values(3,'EName') //

insert into mapping values(4,'Nominal') //

insert into mapping values(5,'Chg') //

 

# 写一个存储过程,往mapping表中插入一条记录,并返回当前记录的总数

drop procedure if exists paddmapping //

create procedure paddmapping (

out cnt int

)

begin

declare maxid int;

select max(cFieldID)+1 into maxid from mapping;

insert into mapping values(maxid,'Hello');

select count(cFieldID) into cnt from mapping;

end //

 

# 定义一个包含输入输出参数的存储过程

drop procedure if exists pinoutmapping //

create procedure pinoutmapping (

in cfid int,

out cfnm varchar(30)

)

 

begin

select cFieldName into cfnm from mapping where cFieldID = cfid;

end;

//

 

# 在定义存储过程时使用输入参数:in inParam type

# 输入参数可以在存储过程中被修改,但是不能返回该输入参数的值

drop procedure if exists pinparam //

create procedure pinparam (

in inparam int

)

begin

select inparam;

# 在存储过程中改变输入参数的值

set inparam = 2;

select inparam;

end;

//

 

# 调用该存储过程之后再查看输入参数的值是否发生改变,虽然输入参数的值在存储过程中进行了修改

 

#在定义存储过程时使用输出参数:out outParam type

#输出参数可以在存储过程中进行修改,且能返回该输出参数的值

drop procedure if exists poutparam //

create procedure poutparam (

out outparam int

)

begin

select outparam;

# 改变输出参数的值

set outparam = 3;

select outparam;

end;

//

 

# 在定义存储过程时使用inout参数:inout inoutParam type

# 在调用存储过程时指定参数值,可在存储过程中改变该参数值且能返回

drop procedure if exists pinoutparam //

create procedure pinoutparam (

inout inoutparam int

)

begin

select inoutparam;

# 在存储过程中改变inout参数的值

set inoutparam = 3;

# 查看在存储过程中改变后的参数值

select inoutparam;

end;

//

 

# 在存储过程中定义变量:declare vname [,vname2 ...] vtype [default value]

# vtype是mysql中的数据类型:int,float,date,varchar(length)

# 变量赋值:set vname=value

drop procedure if exists pvarible //

create procedure pvarible ()

begin

declare uid int(8) default 0;

declare uname varchar(30) default 'root';

select uid as ID,uname as Name;

set uid = 1;

set uname = 'chench';

select uid as ID,uname as Name;

end;

//

 

# 用户变量

# (1)在MySQL客户端使用用户变量

select 'Hello,World!' into @hl //

select @hl //

 

set @gb = 'Good Bye!' //

select @gb //

 

set @gb = 1+2+3 //

select @gb //

 

# (2)在存储过程中使用用户变量

drop procedure if exists pgreetingworld //

create procedure pgreetingworld () select concat(@greeting,' World') //

set @greeting = 'Hello' //

call pgreetingworld() //

 

# (3)在存储过程间调用全局范围内的变量

set @vglobal="zhangsan" //

drop procedure if exists p1 //

create procedure p1 ()

begin

set @vglobal = 'wangwu'; -- 在存储过程中改变mysql全部变量的值

select @vglobal; -- 在存储过程中访问mysql全局变量的值

end;

//

 

drop procedure if exists p2 //

create procedure p2 ()

begin

select concat('variable last value is ',@vglobal);

end;

//

 

# 变量作用域

drop procedure if exists p3 //

create procedure p3()

begin

declare x1 varchar(15) default 'outter';

begin

declare x1 varchar(15) default 'inner';

select x1;

end;

select x1;

end;

//

 

# 存储过程中的条件语句

# 定义一个测试表

drop table if exists pt //

create table pt (

pid int unsigned auto_increment not null,

pname varchar(30) not null,

primary key(pid)

)Engine=InnoDB default charset = utf8 //

 

# (1)if-then -else语句:使用if var then else var end of结构

# 写一个根据传递的参数值是奇数还是偶数来插入数据库表相应的数据记录

drop procedure if exists p4 //

create procedure p4 (

in param int

)

begin

declare t int default 0;

set t = param % 2;

if t = 0 then

insert into pt values(null,'event number!');

else 

insert into pt values(null,'odd number');

end if;

select * from pt;

end;

//

 

# (2)case语句:使用case var when-then ... end case结构

# 根据传递的参数值来插入相应的记录,往pt表中插入记录

drop procedure if exists p5 //

create procedure p5 (

in param int

)

begin

declare value int default -1;

set value = param % 2;

case value

when 0 then

insert into pt values(null,'even number');

else

insert into pt values(null,'odd number');

end case;

select * from pt;

end;

//

 

# 存储过程中的循环语句

# (1)while condition do(先条件再循环)

# ...

#  end while

 

# 通过传递参数,连续插入新的记录到pt表中

delimiter //

drop procedure if exists p6 //

create procedure p6 (

in param int

)

begin

declare i int default 0;

if param > 0 then

while i < param do

insert into pt values(null,'param');

set i = i+1;

end while;

end if;

select * from pt;

end;

//

delimiter ;

 

# (2)repeat (先循环再条件)

# ...

# until condition

# end repeat

 

# 通过传递参数,连续插入新的记录到pt表中

delimiter //

drop procedure if exists p7 //

create procedure p7 (

in param int

)

begin

declare i int default 0;

if param > 0 then

repeat

insert into pt values(null,'repeat');

set i = i+1;

until i >= param

end repeat;

end if;

select * from pt;

#echo 'successfully!'

end;

//

delimiter ;

 

# (3)loop(没有初始条件,也没有结束条件)

# LOOP_LABEL:loop

# ...

# leave LOOP_LABEL --离开循环

# end loop --虽然使用leave离开了循环,但是仍然需要使用end loop作为loop的结束标记,这是语法固定结构

 

# 通过参数传递,往pt表中插入连续的记录

delimiter //

drop procedure if exists p8 //

create procedure p8 (

in param int

)

begin

declare i int default 0;

if param > 0 then

LOOP_LABEL:loop

insert into pt values(null,'loop');

set i = i+1;

if i >= param then

leave LOOP_LABEL; #满足条件就离开循环

end if;

end loop; #虽然已经使用leave离开了循环,但是必须要有loop结束标记

/*while i<param do

insert into pt values(null,'while');

set i=i+1;

end while;

*/

end if;

select * from pt;

end;

//

delimiter ;

 

#

# MySQL存储过程中使用查询结果的值来赋值给变量

# 如:select id into id_value from user where id = '';

# 当查询结果为空时不会进行赋值操作,即:id_value变量将保持原来的值

 

#

查询数据库中的存储过程

 

方法一:

       select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'

 

方法二:

         show procedure status;

 

 

查看存储过程或函数的创建代码

 

show create procedure proc_name;

show create function func_name;

 

# 统计pt数据表中的记录总数,在Java程序中调用该存储过程

delimiter //

drop procedure if exists pcount //

create procedure pcount (

out count int

)

 

begin

#set autocommit = 0;

#start transaction;

select count(pid) into count from pt;

end;

//

delimiter ;

分享到:
评论

相关推荐

    MySQL视图及存储过程学习笔记

    MySQL视图及存储过程学习笔记

    Mysql存储过程学习笔记–建立简单的存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,提高了性能,还减少了网络流量,增强了安全性。以下是对存储过程的详细说明: **一...

    Mysql存储过程学习笔记--建立简单的存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,还能提高执行效率,因为存储过程在首次创建时会被编译,之后的调用只需传入参数即可...

    精通MySQL存储过程和函数

    ### 精通MySQL存储过程和函数 #### 1. 说明 ##### 1.1 手册适用范围 本手册适用于对MySQL存储过程...通过这些知识点的学习,可以帮助开发者更好地理解和应用MySQL存储过程和函数,从而提高应用程序的性能和安全性。

    MySQL核心技术学习笔记

    ### MySQL核心技术学习笔记 #### 一、为什么要学习数据库 学习数据库的重要性主要体现在以下几个方面: 1. **持久化数据到本地**:数据库能够将应用程序产生的数据持久化存储在磁盘上,即使系统重启也不会丢失...

    MySQL学习笔记 MySQL学习笔记

    - 存储过程和函数:预编译的SQL代码块,可重复使用,提高效率。 - 流程控制结构:如IF-ELSE、CASE、WHILE等,使SQL编程更灵活。 学习MySQL不仅涉及理论知识,还需要大量的实践操作来熟悉其语法和功能。掌握MySQL能...

    MySQL学习笔记.zip

    这份“MySQL学习笔记”将引导我们深入理解其核心概念和实用技能。 一、MySQL简介 MySQL是一个开源、免费的数据库系统,由瑞典的MySQL AB公司开发,后被Oracle公司收购。它的设计目标是速度、可移植性和简洁性,支持...

    mysql 个人学习笔记

    MySQL是世界上最受欢迎的关系型数据库管理...以上只是MySQL学习笔记的一部分内容,实际的学习过程中,你还会接触到触发器、分区、复制、集群等更高级的主题。不断实践和深入研究,才能真正掌握这个强大的数据库系统。

    mysql DBA学习笔记

    这份"超经典mysql DBA学习笔记"涵盖了成为一名优秀DBA所需掌握的众多知识点,旨在帮助学习者深入理解MySQL数据库的运维与优化。 一、MySQL概述 MySQL是一种开源、免费的关系型数据库管理系统,广泛应用于互联网应用...

    mysql学习笔记.rar

    首先,"mysql学习笔记.doc"很可能是核心的学习资料,它可能包含了MySQL的基础概念、安装与配置、SQL语言基础、数据类型、数据库设计、表的创建与管理、索引、视图、存储过程、触发器、事务处理、备份与恢复、性能...

    非常详细的某培训机构mysql学习笔记

    非常详细的某培训机构mysql学习笔记,内容系统全面,实用性强 MySQL1 MySQL基础 MySQ单实例部署 MySQL多实例部署 MySQL数据库操作 MySQL数据类型 MySQL存储引擎 MySQL表操作 MySQL2 MySQL数据操作 MySQL单...

    MYSQL知识学习过程笔记

    MYSQL知识学习过程笔记 在学习MYSQL之前,首先需要了解什么是数据库、数据库管理系统和SQL它们之间的关系是什么?数据库英文单词DataBase,简称DB,按照一定格式存储数据的一些文件的组合,顾名思义:存储数据的...

    与MySQL零距离接触学习笔记

    这份"与MySQL零距离接触学习笔记"无疑为初学者提供了一个深入了解MySQL的基础平台。 首先,笔记可能涵盖了MySQL的安装与配置。在Windows、Linux或MacOS等操作系统上安装MySQL通常涉及下载安装包,执行安装过程,并...

    Mysql学习笔记.pdf

    MySQL 是一款广泛使用的开源关系型数据库管理系统,其学习笔记涵盖了多个关键知识点。以下是对这些知识点的详细解释: 1. **MySQL 体系架构** - **网络连接层**:处理客户端的连接请求,包括连接管理、认证和安全...

    mySQL.zip_MYSQL_mysql 课件_学习笔记_笔记_资料

    这份"mySQL.zip_MYSQL_mysql 课件_学习笔记_笔记_资料"的压缩包内容包括了MySQL的培训课件和学习笔记,非常适合初学者进行数据库知识的入门学习。 51CTO下载-Mysql培训课件.pdf可能涵盖了以下MySQL的核心知识点: ...

    超经典mysql dba 学习笔记.zip

    这份“超经典mysql dba学习笔记”包含了丰富的MySQL运维知识,对于想要深入理解和掌握MySQL DBA技能的人来说是一份宝贵的资料。 一、MySQL基础知识 在学习MySQL DBA之前,首先需要了解MySQL的基本概念,包括数据库...

    MySQL学习笔记(含基础、运维、进阶三部分)

    MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...

    Mysql最全学习笔记

    MySQL学习笔记 数据库基础知识: * 数据库(DB):存储数据的容器。 * 数据库管理系统(DBMS):创建或管理数据库的软件,例如 MySQL、Oracle、SQL Server 等。 SQL 介绍: * 结构化查询语言(SQL):与数据库...

    MySQL DBA架构师学习笔记

    MySQL DBA架构师学习笔记涉及了MySQL数据库的部署、配置、监控和优化等多方面的知识点。以下是对文件内容中提及知识点的详细说明: 1. MySQL部署规划:在进行MySQL数据库部署时,需要进行前期规划,确定软件包、...

    MYSQL开发学习笔记

    ### MySQL开发学习笔记知识点梳理 #### 一、基础知识概述 - **数据库定义**: 数据库(database)是用于存储数据的仓库,它可以高效地存储和处理数据。主要存储介质有两种:磁盘和内存(RAM)。 - **数据库分类**: - *...

Global site tag (gtag.js) - Google Analytics