MySQL存储过程与触发器的设计与使用

数据库中的程序逻辑

数据库程序逻辑与PHP程序逻辑的分体设计原则:
所有的数据库操作都可以放到PHP代码中实现。并且,在 MySQL5.0发布之前,几乎所有的PHP与MySQL结合的实例都是这样做的。 MySQL5.0提供了对触发器和存储过程的支持,才使得将程序逻辑放入数据库中的实现成为可能。

一般说来,以下几种情况可以将程序逻辑放入数据库屮来实现
1、触发的操作。在对数据库的信息进行更新时,某一操作将被反复调用。例如,只要对某个数据库表中的数据进行删除,就将被删除的数据存放到另一个表中。
2、原子化操作。例如,在系统中要经常以某个表中的数据为依据对用户的输入进行验证。
3、反复调用的操作。有些操作将被反复调用,并实施相同的功能。例如,在系统中对于每页的访问都向数据库中用于记录日志的表插入一条数据。

数据库程序逻辑与数据的关系
数据库中的程序逻辑与数据的关系和PHP与数据库的关系相类似,两者都是用于存取数据的,数据库中的程序逻辑本身不包含任何数据。
数据库中用于实现程序逻辑的对象通常包括存储过程触发器两种。
存储过程主要供PHP程序调用,并实现存储数据的功能;
触发器是当数据发生变化满足触发要求时被调用的,并实现存取数据的功能。
在这里插入图片描述

一、存储过程的设计:

1、定界符重定义:
默认情况下,美碰到一次分号就会将语句提交并执行。在存储过程或者触发器的设计中,通常会有多条sql语句,会遇到很多分号,于是我们需要在执行前使用我们自己定义的定界符。
方法:mysql > delimiter //(你自己的定界符)

2、存储过程创建与使用:(通过命令行的方式)
函数:

create produce name**(参数) 
	body(代码部分);

参数:
1)、in:表示该参数是一个传入的参数
2)、out:表示该参数是一个传出的参数
3)、inout:表示该参数是一个既是传入也是传出的参数

3、复合语句:
在存储过程中可能不止一条SQL语句,需要用到begin…end来表示语句的开始和结束。

begin
....
end

4、变量
在存储过程中声明变量:declare name type default value;其中name表示变量名,type表示变量类型,如int,string 等,default value即该变量的默认值或者用户设定的值,如果没有设置初始值,则通过set来对变量赋值:set a = 7。

5、条件语句
1)if-then-else-end if:

if 判断条件 then
	代码;
	else
	代码;
end if;

2)case:

case 变量
when 值1 then 执行代码;
when 值2 then 执行代码;
else 执行代码;
end case;

在存储过程中没有break语句,即程序配到到相应的value后执行相关语句后就会退出,不会再依次进行后面的语句。

6、循环
1)while:

whie 条件 do
语句;
end while;//***直到条件不成立后退出循环;

2)repate:

 repate
 执行语句;
 unti 条件
 end while;

3)loop

 loop_table:loop
 代码语句;
 if 条件 then  //条件满足就跳到loop标签指定位置。
 leave loop_label;
 end if; 
 end loop;

7、游标的使用:
使用游标是为了对数据表中的每一条数据进行操作,游标是一个可以用于循环读取数据表中的对象,每次读取数据表中1的一行。
1)定义游标:

declare curl(游标名) cursor for sql_statement(游标使用的SQL语句)

2)打开游标:

open cursor_name;

3)获取游标类容:

fetch cursor_name into 变量1,变量2........
//将读取到的数据存储到into后指定的变量中,并移动到下一行。

4)关闭游标:

close cursor_name;

8)删除存储过程:

drop procedure pro_name;

二、触发器的设计:

1、触发器的创建与触发:

create trigger name(触发器名字)
before|after//触发器触发时间。
insert|update|delete//操作,即在在操作之前发生还是操作之后发生
on table(表名)//在哪一个表进行操作
for each row 
body//代码语句,在触发器体内有两个默认的行new,old。即一个是操作前的,一个是操作后的。

2、触发器的删除:

drop trigger_name;

个人小结:在PHP中调用存储过程和执行SQL语句进行数据库查询是相同的,而对于触发器,使用PHP进行数据库操作的行为同样会自动触发触发器的行为。总而言之,存储过程与触发器的使用即是为了提高数据库执行的效率和数据的安全性。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储过程可以使用EXEC procedure_name语句执行。 实验5.2 触发器的建立与使用 一、实验目的 理解触发器的概念和作用;了解触发器的分类及触发条件;掌握触发器的定义及应用。 二、实验原理 1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、update)执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发器。INSTEAD OF类型的触发器会在触发语句(insert、delete、update)执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。 SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED表中保存要向表中插入的所有行;当执行DELETE时,DELETED表中保存要从表中删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表中,修改后的行保存在INSERTED行中。
MySQL存储过程触发器MySQL提供的两种基本的数据库对象。它们都可以用来处理数据库中的数据和执行某些操作,但是它们的实现目的和使用场景有所不同。 1. 存储过程 MySQL存储过程是一种预编译的程序,可以在MySQL服务器上进行存储和执行。存储过程通常用于封装一组SQL语句,以便在需要时可以重复使用它们。存储过程可以包含变量、条件语句、循环语句和异常处理等元素,使其更加灵活和强大。 存储过程的主要优点是: - 可以提高数据库的性能,因为存储过程只需要在第一次执行时进行编译,以后执行时直接使用编译好的代码。 - 可以重复使用,减少代码的重复编写和维护工作。 - 可以实现比一般SQL语句更为复杂的数据处理操作。 2. 触发器 MySQL触发器是一种特殊的存储过程,它是在特定的数据操作(如插入、更新、删除)发生时自动执行的。触发器通常用于实现数据约束和业务逻辑,以确保数据的完整性和一致性。 触发器的主要优点是: - 可以自动执行,减少了手动操作的错误和疏漏。 - 可以实现更加严格的数据约束和业务逻辑,从而提高数据的安全性和可靠性。 综上所述,存储过程触发器都是MySQL提供的强大功能,它们可以帮助我们更好地管理和处理数据库中的数据。在实际应用中,我们需要根据具体的业务需求和数据操作情况,选择合适的方式来使用存储过程触发器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值