`
zhengdl126
  • 浏览: 2531553 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

【存储过程】MySQL存储过程,存储函数

阅读更多

存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令

Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。


存储过程主要完成在获取记录或插入记录或更新记录或删除记录,即完成select insert delete update等的工作。
而存储函数只完成查询的工作,可接受输入参数并返回一个结果。

 

show procedure status查看已创建的存储过程


-------------------------

CALL p_draws(@a);
SELECT @a;

 

 



CREATE TABLE `myisam` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
`post` text,
PRIMARY KEY (`id`)

 

 

 

 


-------------------------create procedure 存储过程名(参数)
调用存储过程
call 存储过程名();

------取总记录
create procedure select_myisam()
select * from myisam;
在终端运行并调用
#call select_news();


声明参数时规定要使用关键字IN,OUT,INOUT。
其中:
IN:用于输入参数
OUT:用于返回参数
INOUT:用于向存储过程传递参数值,如果该值改变则返回

----------取某条记录
drop procedure if exists select_myisam;
show procedure status;
create procedure select_myisam(IN id int,OUT name varchar(50))
select name from myisam where id=id;
调用#call select_myisam(1,@name);
1是我们要传入的信息编号,title是要返回的对应信息编号标题,由于是OUT所以再调用时要在其前加@



------取总数
create procedure getNum(OUT num int)
select COUNT(*) as num from myisam;
call getNum(@num);



多行存储过程写法:
create procedure sp_name()
begin
………
end



执行 call procedure()语句
如果有返回值,执行select   @ar,返回执行结果。

---------------------------------create function 存储函数名(参数)

与存储过程返回参数不同的是存储函数在定义时没用直接声明哪个变量是返回参数,而只是使用了returns声明了返回参数所属的数据类型,返

回参数是在函数体中使用return返回要返回的数据变量的形式来表示的。这就需要注意的是:
存储函数只支持输入参数,并且输入参数前没有IN或INOUT.

delimiter //
使用delimiter更改mysql默认使用分号(;)使用新的结束符号来结束当前语句,使用delimiter后原先默认的分号(;)结束语句符号不再起作用,

直到重新恢复声明结束符后。

create function count_news(hits int) returns int
注意存储函数的参数只有输入参数并且前不再声明IN或INOUT,返回只需声明要返回的数据类型


drop function if exists count_myisam;
delimiter //
create function count_myisam(hits int) returns int
comment '根据传入的点击次数统计超过此点击数的信息数目'
begin
declare total_news int;
declare hits_num int default 0;
if hits>=0 then
set hits_num=hits;
select count(id) into total_news from myisam where myisam.id>hits_num;
else
set total_news=0;
end if;
return total_news;
end;
//
delimiter ;

调用select count_myisam(5);






ERROR 1418 (HY000) log_bin_trust_function_creators 解决
今天要写一个函数.但没有办法建提示错误如下:
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
    -> RETURN CONCAT('Hello, ',s,'!');
    -> //
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging

is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
 
解决方式:(编缉my.cnf,添加如下)
[mysqld]
log_bin_trust_routine_creators = 1

 

 

 

 

 

 

 

 

 

 

----------------------------------------------存储过程实例

首先创建一个库


mysql>create database mysqlsystems
mysql>use mysqlsystems;

 


创建两个表 - innodb的和myisam的

 

mysql>
CREATE TABLE `myisam` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
`post` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `innodb` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
`post` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 


这样叫创建了两个表,innodb和myisam。
创建可插入数据的 存储过程

 

mysql>
delimiter @
create procedure insert_isam(in item integer)
begin
declare counter int;
set counter = item;
while counter >= 1 do
insert into myisam values(counter,concat('mysqlsystems.com',counter),repeat('bla',10));
set counter = counter - 1;
end while;
end
@

create procedure insert_innodb(in item integer)
begin
declare counter int;
set counter = item;
while counter >= 1 do
insert into innodb values(counter,concat('mysqlsystems.com',counter),repeat('bla',10));
set counter = counter - 1;
end while;
end
@
delimiter ;

 


好了,show procedure status查看已创建的存储过程


运行吧,
你要插入100条到innodb?         执行

mysql>

call insert_innodb(100)
插入1000000到myisam?         

mysql>

call insert_myisam(1000000)
记得再一次插入新的内容时,要清空你的表,delete from ,或者truncate 。
插入10亿条?

 

 

----------------------------------------------------------------------------------基本知识

 

一.创建存储过程

1.基本语法:
create procedure sp_name()
begin
………
end
2.参数传递

二.调用存储过程

1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程

1.基本语法:
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.区块,条件,循环

1.区块定义,常用
begin
……
end;
也可以给区块起别名,如:
lable:begin
………..
end lable;
可以用leave lable;跳出区块,执行区块以后的代码
2.条件语句 if 条件 then
statement
else
statement
end if;
3.循环语句
(1).while循环

[label:] WHILE expression DO

statements

END WHILE [label] ;

(2).loop循环 [label:] LOOP

statements

END LOOP [label];
(3).repeat until循环 [label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;
五.其他常用命令

1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
2.show create procedure sp_name
显示某一个存储过程的详细信息

 

 

分享到:
评论

相关推荐

    mysql存储过程和存储函数

    mysql存储过程,存储函数练习,里面有详细代码,供大家参考

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...

    mysql存储过程和存储函数的示例

    mysql 存储过程 ,存储函数的调用示例

    Mysql存储过程和函数

    ### MySQL存储过程与函数详解 #### 一、概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和存储方面提供了强大的支持。其中,存储过程和函数是MySQL提供的两种重要的编程特性,它们可以帮助开发者...

    mysql存储过程之返回多个值的方法示例

    本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    第11章MySQL存储过程与函数.docx

    创建存储函数的示例: CREATE FUNCTION numstu() RETURNS INTEGER BEGIN RETURN (SELECT COUNT(*) FROM student); END; 调用该存储函数: SELECT numstu(); 存储过程的优点: 1. 存储过程增强了 SQL 语言的...

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    精通MySQL存储过程和函数

    ### 精通MySQL存储过程和函数 #### 1. 说明 ##### 1.1 手册适用范围 本手册适用于对MySQL存储过程和函数感兴趣的开发者和技术人员,特别是那些希望深入了解并掌握如何在实际项目中高效利用这些功能的专业人士。...

    mysql存储例程、存储过程、存储函数进阶学习

    MySQL存储例程,包括存储过程和存储函数,是数据库管理中的重要组成部分,它们极大地提高了数据库应用的效率和灵活性。在进阶学习中,我们需要深入理解这些概念及其在实际开发中的应用。 1. **存储过程**:存储过程...

    mysql存储过程——用于数据库的备份与还原

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重用的程序单元。在本场景中,我们关注的是如何利用存储过程进行数据库的备份与还原,这在数据管理中至...

    MySQL数据库函数,触发器,存储过程

    通过深入学习和掌握MySQL的函数、触发器和存储过程,开发者能够更加高效地管理和操作数据库,解决复杂的数据处理问题,提升应用程序的性能。在实际项目中,熟练运用这些特性是数据库设计和优化的关键。通过"mysql...

    mysql存储函数以及函数过程

    mysql+零基础+mysql存储函数以及函数过程知识点

    Mysql 存储过程(输入,返回),函数,临时表

    Mysql 存储过程,函数,临时表 存储过程包括输入返回,可供项目中遇到难题的人解决一下,我曾为此费了好大精力,最后总结出来共大家分享

    Mysql手册20-存储过程和函数

    MySQL存储过程和函数是数据库编程的重要组成部分,它们提供了在数据库服务器上执行特定任务的能力。本部分详细介绍了存储程序和函数的各个方面,包括它们的创建、语法、权限控制以及与性能优化相关的概念。 首先,...

    MySQL存储过程.pdf

    MySQL存储过程 MySQL存储过程(Stored Procedure)是一种复杂的数据库对象,允许用户将多个SQL语句组合成一个单一的执行单元,以提高数据库的性能和可维护性。下面是 MySQL 存储过程的相关知识点: 存储过程的定义...

    MySQL5新特性之存储过程MySQL5新特性之存储过程

    这使得存储过程可以像函数一样接受参数,并返回结果,增加了程序的复用性和灵活性。 2. **流程控制结构**:MySQL5引入了流程控制结构,如`IF...ELSE`、`CASE`、`WHILE`循环和`FOR`循环等,使得存储过程可以实现更...

    MySQL触发器、存储过程、自定义函数、视图示例

    #### 二、MySQL存储过程 存储过程是一组预编译的SQL语句,它们可以作为一个单元调用并执行。使用存储过程可以提高代码重用性和执行效率,并且可以封装复杂的逻辑处理。 **示例:** 本例中创建了一个存储过程`sp_...

Global site tag (gtag.js) - Google Analytics