MySql创建一个存储过程
MySQL 存储过程是从 MySQL 5.0 新功能。存储过程的长处有一箩筐。只是最基本的还是运行效率和SQL 代码封装。
特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 PHP),要组织非常多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的
SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。如今有了 MySQL 存储过程,业务逻辑能够封装存储过程中,这样不仅easy维护,并且运行效率也高。
一、MySQL 创建存储过程
“pr_add” 是个简单的 MySQL 存储过程。这个存储过程有两个 int 类型的输入參数 “a”、“b”,返回这两个參数的和。
drop procedure if exists pr_add;
-- 计算两个数之和
create procedure pr_add
(
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;
/*
return c;- 不能在 MySQL 存储过程中使用。return 仅仅能出如今函数中。
/
end;
二、调用 MySQL 存储过程
call pr_add(10, 20);
运行 MySQL 存储过程,存储过程參数为 MySQL 用户变量。
set @a = 10;
set @b = 20;
call pr_add(@a, @b);
三、MySQL 存储过程特点
创建 MySQL 存储过程的简单语法为:
create procedure 存储过程名字()
(
[in|out|inout] 參数 datatype
)
begin
MySQL 语句;
end;
MySQL 存储过程參数假设不显式指定“in”、“out”、“inout”。则默觉得“in”。习惯上。对于是“in” 的參数,我们都不会显式指定。
1. MySQL 存储过程名字后面的“()”是必须的,即使没有一个參数。也须要“()”
2. MySQL 存储过程參数,不能在參数名称前加“@”。如:mailto:%E2%80%9C@a int”。以下的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不须要在变量名字前加“@”,尽管 MySQL
client用户变量要加个“@”。
create procedure pr_add
(
@a int,- 错误
b int - 正确
)
3. MySQL 存储过程的參数不能指定默认值。
4. MySQL 存储过程不须要在 procedure body 前面加 “as”。而 SQL Server 存储过程必须加 “as” keyword。
create procedure pr_add
(
a int,
b int
)
as - 错误,MySQL 不须要 “as”
begin
mysql statement ...;
end;
5. 假设 MySQL 存储过程中包括多条 MySQL 语句,则须要 begin end keyword。
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6. MySQL 存储过程中的每条语句的末尾。都要加上分号 “;”
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;
7. MySQL 存储过程中的凝视。
/*
这是个
多行 MySQL 凝视。
/
declare c int; - 这是单行 MySQL 凝视 (注意- 后至少要有一个空格)
if a is null then 这也是个单行 MySQL 凝视
set a = 0;
end if;
...
end;
8. 不能在 MySQL 存储过程中使用 “return” keyword。
set c = a + b;
select c as sum;
/*
return c;- 不能在 MySQL 存储过程中使用。return 仅仅能出如今函数中。
/
end;
9. 调用 MySQL 存储过程时候,须要在过程名字后面加“()”,即使没有一个參数,也须要“()”
call pr_no_param();
10. 由于 MySQL 存储过程參数没有默认值。所以在调用 MySQL 存储过程时候,不能省略參数。能够用 null 来替代。
call pr_add(10, null);
版权声明:本文博客原创文章,博客,未经同意,不得转载。
MySql创建一个存储过程的更多相关文章
- 020、MySQL创建一个存储过程,显示存储过程,调用存储过程,删除存储过程
一.我们创建一个MySQL储存过程,在SQL代码区写入以下内容,并执行就可以了 #编写一个存储过程 CREATE PROCEDURE ShowDate ( ) BEGIN #输出当前时间 SELECT ...
- MySQL创建一个用户,指定一个数据库 授权
Mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 hail mysql -u root -ppassworduse mysql;insert into user(h ...
- 转:mysql 创建一个用户,指定一个数据库
转自:http://blog.sina.com.cn/s/blog_8c2525390101h0dv.html mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 h ...
- mysql 创建一个用户,指定一个数据库
mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 hail mysql -u root -p password use mysql; insert into use ...
- 1 创建一个存储过程,以及对存储过程的调用 MySQL
1 首先创建一张tb1表 sql语句如下 CREATE TABLE `tb1` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `age` int(11) DE ...
- MySQL, 创建一个只读用户和一个所有权限用户
安装pasa需要配置mysql.基本知识学习一下 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html MySQL 为关系型数据库 ...
- MySQL 创建一个简单的成绩管理系统
操作过程使用实验楼. 首先是创建一个数据库studentsystem,使用语句是: CREATE DATABASE studentsystem; 查看创建好的数据库的命令还是SHOW DATABAS ...
- mysql 让一个存储过程定时作业的代码
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...
- mysql 让一个存储过程定时作业的代码(转)
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...
随机推荐
- Visual Studio 连接不上NuGet 官方程序包源的解决办法
修改dns 即可
- .NET 并行(多核)编程系列之六 Task基础部分完结篇
原文:.NET 并行(多核)编程系列之六 Task基础部分完结篇 .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些 ...
- 【最小割】HDU 4971 A simple brute force problem.
说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习 ...
- 使用Python做科学计算初探(转)
今天在搞定Django框架的blog搭建后,尝试一下python的科学计算能力. python的科学计算有三剑客:numpy,scipy,matplotlib. numpy负责数值计算,矩阵操作等: ...
- NetBeans工具学习之道:NetBeans IDE Java 高速新手教程
欢迎使用 NetBeans IDE! 本教程通过指导您创建一个简单的 "Hello World" Java 控制台应用程序,简要介绍 NetBeans IDE 工作流.学习完本教程 ...
- Nancy
Nancy Nancy 是一个轻量级的,简单粗暴的framework用来构建基于HTTP的各种服务,兼容.Net和Mono.Nancy的整套设计理念是基于"super-duper-happy ...
- Androida规划nt打包
1.准备工作 (1)首先安装好ant工具 (2)生成keystore 在jdk的bin文件夹下 输入 keytool -genkey -alias android.keystore -keyalg R ...
- js 面向对象选项卡
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" conte ...
- gradle中使用cobertura做代码覆盖(转)
gradle很好用,但是默认是没有代码覆盖功能的,只好自己写.曾经在网上找到过别人的一段脚本,虽然也能用,但是有一些不爽的地方,一个原因是它不支持对层级工程中全部代码的覆盖,另一个原因是它用替换bui ...
- 代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)
在发展的前几天遇到的问题,在调试过程中发现配置service本次交易不工作层,更新后数据库抛出异常或成功,交易不会回滚.随后开始了各种检查,视图spring的事务是否配置正确,进入更新方法时是否开启了 ...