百度
360搜索
搜狗搜索

mysql创建存储过程的语句,mysql存储过程怎么写详细介绍

本文目录一览: mysql存储过程怎么写

MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。下面我们来介绍一下如何创建一个存储过程。语法格式:可以使用 CREATE PROCEDURE 语句创建存储过程。语法格式如下:CREATE PROCEDURE

( [过程参数[,?] ] )

[过程参数[,?] ] 格式[ IN | OUT | INOUT ]

语法说明如下:1) 过程名存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。2) 过程参数存储过程的参数列表。其中,

为参数名,

为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。3) 过程体存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。为解决这个问题,通常可使用 DELIMITER 命令将结束命令修改为其他字符。语法格式如下:DELIMITER $$语法说明如下:$$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。当使用 DELIMITER 命令时,应该避免使用反斜杠“\”字符,因为它是 MySQL 的转义字符。在 MySQL 命令行客户端输入如下SQL语句。mysql > DELIMITER ??成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个问号“??”了。若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可:mysql > DELIMITER ;注意:DELIMITER 和分号“;”之间一定要有一个空格。在创建存储过程时,必须具有 CREATE ROUTINE 权限。可以使用 SHOW PROCEDURE STATUS 命令查看数据库中存在哪些存储过程,若要查看某个存储过程的具体信息,则可以使用 SHOW CREATE PROCEDURE

。创建不带参数的存储过程 存储过程的作用是从学生成绩信息表中查询学生的成绩信息,输入的 SQL 语句和执行过程如下所示。mysql> DELIMITER //mysql> CREATE PROCEDURE ShowStuScore() -> BEGIN -> SELECT * FROM tb_students_score; -> END //Query OK, 0 rows affected (0.09 sec)






MySql编写一个存储过程?

1、delimiter // ,声明分隔符:DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码(这里如果不懂的话,你可以通过试错的方法来理解)。
2、编写存储过程的格式:CREATE PROCEDURE([[IN |OUT |INOUT ]参数名数据类形...])
例子:
  1)create procedure proc1(out s int) // 只有输出
  2)create procedure proc2(in p_in bigint) // 只有输入
  3)create procedure proc15() // 没有输入与输出
  4)create procedure demo_multi_param(in id bigint,in name varchar(32),out c int) //多输入与输出
3、过程体的开始与结束使用BEGIN与END进行标识。
4、select count (*) into s from student; // 过程体,一系列的逻辑语句,sql语句
5、delimiter ; 用完了之后要把分隔符还原。

mysql如何创建存储过程

存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。推荐课程:MySQL教程。优点(为什么要用存储过程?):①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用②批量处理:SQL+循环,减少流量,也就是“跑批”③统一接口,确保数据的安全相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。一、存储过程的创建和调用>存储过程就是具有名字的一段代码,用来完成一个特定的功能。>创建的存储过程保存在数据库的数据字典中。1、创建存储过程CREATE [DEFINER = { user | CURRENT_USER }]PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_bodyproc_parameter: [ IN | OUT | INOUT ] param_name typecharacteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }routine_body:Valid SQL routine statement[begin_label:] BEGIN[statement_list]??END [end_label]#创建数据库,备份数据表用于示例操作mysql> create database db1;mysql> use db1; mysql> create table PLAYERS as select * from TENNIS.PLAYERS;mysql> create table MATCHES as select * from TENNIS.MATCHES;示例:创建一个存储过程,删除给定球员参加的所有比赛mysql> delimiter $$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;#将语句的结束符号恢复为分号解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。二、存储过程的参数存储过程可以有0个或多个参数,用于存储过程的定义。3种参数类型:IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)1、in输入参数mysql> delimiter $$mysql> create procedure in_param(in p_in int) -> begin -> select p_in; -> set p_in=2; -> select P_in; -> end$$mysql> delimiter ;mysql> set @p_in=1;mysql> call in_param(@p_in);+------+| p_in |+------+| 1 |+------++------+| P_in |+------+| 2 |+------+mysql> select @p_in;+-------+| @p_in |+-------+| 1 |+-------+#以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。2、out输出参数mysql> delimiter //mysql> create procedure out_param(out p_out int) -> begin -> select p_out; -> set p_out=2; -> select p_out; -> end -> //mysql> delimiter ;mysql> set @p_out=1;mysql> call out_param(@p_out);+-------+| p_out |+-------+| NULL |+-------+#因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+| p_out |+-------+| 2 |+-------+mysql> select @p_out;+--------+| @p_out |+--------+| 2 |+--------+#调用了out_param存储过程,输出参数,改变了p_out变量的值3、inout输入参数mysql> delimiter $$mysql> create procedure inout_param(inout p_inout int) -> begin -> select p_inout; -> set p_inout=2; -> select p_inout; -> end -> $$mysql> delimiter ;mysql> set @p_inout=1;mysql> call inout_param(@p_inout);+---------+| p_inout |+---------+| 1 |+---------++---------+| p_inout |+---------+| 2 |+---------+mysql> select @p_inout;+----------+| @p_inout |+----------+| 2 |+----------+#调用了inout_param存储过程,接受了输入的参数,也输出参数,改变了变量注意:①如果过程没有参数,也必须在过程名后面写上小括号例:CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ??②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理强烈建议:>输入值使用in参数;>返回值使用out参数;>inout参数就尽量的少用。

阅读更多 >>>  mysql数据库用什么软件,数据库软件都有那些?

如何通过用MySQL怎么创建存储过程?

创建存储过程
CREATE PROCEDURE 存储过程名()
一个例子说明:一个返回产品平均价格的存储过程如下代码:
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END;
//创建存储过程名为productpricing,如果存储过程需要接受参数,可以在()中列举出来。即使没有参数后面仍然要跟()。BEGIN和END语句用来限定存储过程体,过程体本身是个简单的SELECT语句

mysql中如何创建存储过程

-- 创建存储过程DELIMITER $ --声明存储过程的结束符
CREATE PROCEDURE stu_test() --存储过程名称(参数列表)
BEGIN --开始 -- 可以写多个sql语句 -- sql语句+流程控制
END $ --结束 结束符
-- 执行存储过程call stu_test() --call 存储过程名称(参数)
参数:IN: 表示输入参数,可以携带数据带存储过程中OUT: 表示输出参数,可以从存储过程中返回结果INOUT: 表示输入输出参数,两者结合

如何创建MySQL存储过程

创建存储过程
mysql>
delimiter
$
--
delimiter
$是设置
$为命令终止符号,代替默认的分号,因为分号有其他用处.
mysql>
create
procedure
sp_test(IN
pi_id
int,
OUT
po_name
varchar(10))
->
begin
->
select
*
from
test.tb_test;
->
select
tb_test.name
into
po_name
from
test.tb_test
where
tb_test.id
=
pi_id;
->
end
->
$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
delimiter
;
--
恢复分号作为分隔终止符号
5.调用存储过程
mysql>
set
@po_name='';
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
call
sp_test(1,@po_name);

mysql为四个表创建储存过程或者储存函数

“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集
如下
CREATE
PROCEDURE
sp2
AS
DECLARE
@t
table(a
int,b
int,c
int)
INSERT
INTO
@t(a,b,c)
EXEC
sp1
SELECT
*
FROM
@t
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。
创建存储过程
  和数据表一样,在使用之前需要创建存储过程,它的简明语法是:
引用:
Create
PROC
存储过程名称
[参数列表(多个以“,”分隔)]
AS
SQL
语句
例:
引用:
Create
PROC
upGetUserName
@intUserId
INT,
@ostrUserName
NVARCHAR(20)
OUTPUT
--
要输出的参数
AS
BEGIN
--
将uName的值赋给
@ostrUserName
变量,即要输出的参数
Select
@ostrUserName=uName
FROM
uUser
Where
uId=@intUserId
END
  其中
Create
PROC
语句(完整语句为Create
PROCEDURE)的意思就是告诉SQL
SERVER,现在需要建立一个存储过程,upGetUserName
就是存储过程名称,@intUserId

@ostrUserName
分别是该存储过程的两个参数,注意,在SQL
SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL
SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。

MySQL里面sql语句调用存储过程,该如何写?

这样:
CREATE PROCEDURE sp_add(a int, b int,out c int)
begin
set c=a+ b;
end;
调用过程:
call sp_add (1,2,@a);
select @a;
扩展资料:注意事项
存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。
存储过程分为系统存储过程和自定义存储过程。
系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存储过程前加上数据库名,因为在创建一个新数据库时,系统存储过程在新的数据库中会自动创建。
自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功,并不能像函数那样被直接调用,只能利用execute来执行存储过程。
创建存储过程
SQL Server创建存储过程:
create procedure 过程名
@parameter 参数类型
@parameter 参数类型
。。。
as
begin
end
执行存储过程:execute 过程名

mysql存储过程的基本用法有哪些

mysql存储过程的基本用法有哪些
在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。
特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。
一、MySQL 创建存储过程
"pr_add" 是个简单的 MySQL 存储过程,这个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 存储过程参数,不能在参数名称前加"@",如:"@a int"。下面的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不需要在变量名字前加"@",虽然 MySQL 客户端用户变量要加个"@"。
复制代码 代码如下:
create procedure pr_add
(
@a int, -- 错误
b int -- 正确
)
3. MySQL 存储过程的参数不能指定默认值。
4. MySQL 存储过程不需要在 procedure body 前面加 "as"。而 SQL Server 存储过程必须加 "as" 关键字。
复制代码 代码如下:
create procedure pr_add
(
a int,
b int
)
as -- 错误,MySQL 不需要 "as"
begin
mysql statement ...;
end;
5. 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。
复制代码 代码如下:
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;

阅读更多 >>>  数据管理主要包括什么

网站数据信息

"mysql创建存储过程的语句,mysql存储过程怎么写"浏览人数已经达到25次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:mysql创建存储过程的语句,mysql存储过程怎么写的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!