什么时候PHP经验MySQL存储过程

什么时候PHP经验MySQL存储过程

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1、MySQL存储过程

数据库语言,我们经常使用的操作SQL语句必须首先编译在运行时。然后运行,存储过程(Stored Procedure)它被设置为完成一个特定的功能SQL报表设置。编译存储在数据库中的后。通过用户名和给定参数指定的存储过程(假设与参数的存储过程)调用运行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它能够有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上运行同样的函数,或者封装特定功能时,存储过程是很实用的。数据库中的存储过程能够看做是对编程中面向对象方法的模拟。它同意控制数据的訪问方式。 

2、存储过程通常有下面长处:

(1)存储过程增强了SQL语言的功能和灵活性。

存储过程能够用流控制语句编写,有非常强的灵活性。能够完毕复杂的推断和较复杂的运算。
(2)存储过程同意标准组件是编程。

存储过程被创建后,能够在程序中被多次调用。而不必又一次编写该存储过程的SQL语句。并且数据库专业人员能够随时对存储过程进行改动。相应用程序源码毫无影响。
(3)存储过程能实现较快的运行速度。假设某一操作包括大量的Transaction-SQL代码或分别被多次运行,那么存储过程要比批处理的运行速度快非常多。由于存储过程是预编译的。

在首次运行一个存储过程时查询,优化器对其进行分析优化。而且给出终于被存储在系统表中的运行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 
(4)存储过程能过降低网络流量。针对同一个数据库对象的操作(如查询、改动),假设这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的仅仅是该调用语句。从而大大添加了网络流量并降低了网络负载。
(5)存储过程可被作为一种安全机制来充分利用。系统管理员通过运行某一存储过程的权限进行限制,可以实现对对应的数据的訪问权限的限制。避免了非授权用户对数据的訪问,保证了数据的安全。

3、PHP调用MySQL案例

实例一:无參的存储过程

$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
$sql = "
create procedure myproce()
begin
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
end; 
";
mysql_query($sql);//创建一个myproce的存储过程

$sql = "call test.myproce();";
mysql_query($sql);//调用myproce的存储过程,则数据库中将添加一条新记录。

实例二:传入參数的存储过程

$sql = "
create procedure myproce2(in score int)
begin
if score >= 60 then
select 'pass';
else
select 'no';
end if;
end; 
";
mysql_query($sql);//创建一个myproce2的存储过程
$sql = "call test.myproce2(70);";
mysql_query($sql);//调用myproce2的存储过程,看不到效果。能够在cmd下看到结果。

实例三:传出參数的存储过程

$sql = "
create procedure myproce3(out score int)
begin
set score=100;
end; 
";
mysql_query($sql);//创建一个myproce3的存储过程
$sql = "call test.myproce3(@score);";
mysql_query($sql);//调用myproce3的存储过程
$result = mysql_query('select @score;');
$array = mysql_fetch_array($result);
echo '<pre>';print_r($array);

实例四:传出參数的inout存储过程

$sql = "
create procedure myproce4(inout sexflag int)
begin
SELECT * FROM user WHERE sex = sexflag;
end; 
";
mysql_query($sql);//创建一个myproce4的存储过程
$sql = "set @sexflag = 1";
mysql_query($sql);//设置性别參数为1
$sql = "call test.myproce4(@sexflag);";
mysql_query($sql);//调用myproce4的存储过程,在cmd以下看效果

实例五:使用变量的存储过程 

$sql = "
create procedure myproce5(in a int,in b int)
begin
declare s int default 0;
set s=a+b;
select s;
end; 
";
mysql_query($sql);//创建一个myproce5的存储过程
$sql = "call test.myproce5(4,6);";
mysql_query($sql);//调用myproce5的存储过程,在cmd以下看效果

实例六:case语法

$sql = "
create procedure myproce6(in score int)
begin
case score
when 60 then select '及格';
when 80 then select '及良好';
when 100 then select '优秀';
else select '未知分数';
end case;
end; 
";
mysql_query($sql);//创建一个myproce6的存储过程
$sql = "call test.myproce6(100);";
mysql_query($sql);//调用myproce6的存储过程,在cmd以下看效果

实例七:循环语句

$sql = "
create procedure myproce7()
begin
declare i int default 0;
declare j int default 0;
while i<10 do
set j=j+i;
set i=i+1;
end while;
select j;
end; 
";
mysql_query($sql);//创建一个myproce7的存储过程
$sql = "call test.myproce7();";
mysql_query($sql);//调用myproce7的存储过程,在cmd以下看效果

实例八:repeat语句

$sql = " 
create procedure myproce8()
begin
declare i int default 0;
declare j int default 0;
repeat
set j=j+i;
set i=i+1;
until j>=10
end repeat;
select j;
end; ";
mysql_query($sql);//创建一个myproce8的存储过程
$sql = "call test.myproce8();";
mysql_query($sql);//调用myproce8的存储过程,在cmd以下看效果

实例九:loop语句

$sql = "
create procedure myproce9()
begin
declare i int default 0;
declare s int default 0;

loop_label:loop
set s=s+i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
select s;
end; 
";
mysql_query($sql);//创建一个myproce9的存储过程
$sql = "call test.myproce9();";
mysql_query($sql);//调用myproce9的存储过程,在cmd以下看效果

实例十:删除存储过程

mysql_query("drop procedure if exists myproce");//删除test存储过程

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117551.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • docker容器和主机同网段_docker桥接模式下外网访问

    docker容器和主机同网段_docker桥接模式下外网访问首先我们需要了解的是:每个docker容器都是隔离的,所以它们之间是相互不同的!那么我们开始操作起来,让他们之间可以相互ping通网络。。。一、拉取镜像创建容器1.在这之前首先关闭防火墙;如果显示runinng则执行:sudosystemctlstopfirewalld2.在https://hub.docker.com里拉取镜像busybox(注:busybox相当于小型的c…

  • Linux虚拟机联网设置详细教程[通俗易懂]

    Linux虚拟机联网设置教程小伙伴们,你们在使用linux期间,是否遇到过需要联网的需求呢。这是一篇教你如何把Linux系统接入互联网的教程,本文介绍了两种联网的方式,适用的场景略有不同,每一种方法的优缺点会在文档中说明,请根据实际环境,自行选择,希望本文能帮助到你。一.环境介绍硬件:联想台式机软件:vmwareworkstation15pro操作系统:Centos7.9二.优缺点对比方法优点缺点桥接模式局域网内,与物理机处于同等位置,占用独立的局域网IP地址

  • 测试中常用的adb shell命令

    测试中常用的adb shell命令

  • 怎样用Google APIs和Google的应用系统进行集成(3)—-调用Google 发现(Discovery)API的RESTful服务

    怎样用Google APIs和Google的应用系统进行集成(3)—-调用Google 发现(Discovery)API的RESTful服务

    2021年11月30日
  • 用户态和内核态切换开销_进程切换在用户态还是内核态

    用户态和内核态切换开销_进程切换在用户态还是内核态1.切换方式从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作:系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,但是软件中断,跟硬中断不同。系统调用机制是使用了操作系统为用户特别开放的一个中断来实现,如Linux的int80h中断。 异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,会触发由当前运行进程切换到处理此异常的内核相关进程中 外围设备中断:外围设备完成用户请求的操作之后,会向CPU发出中断信号,这

  • 内存或磁盘空间不足,excel无法再次打开_打开文件显示内存或磁盘空间不足

    内存或磁盘空间不足,excel无法再次打开_打开文件显示内存或磁盘空间不足在网络上下载的文件,使用EXCEL打开的时候提示“内存或磁盘空间不足,MicrosoftExcel无法再次打开或保存任何文档。”,针对这个问题,装机之家小编特地在网上搜罗了具体解决方法,但是网上提

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号