存储过程与触发器

什么是存储过程?

存储过程像是sql中的方法,在存储过程中可以利用代码逻辑去实现一些功能。可以定义变量,if判断,while,lomp循环。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。存储过程可以减少sql代码量,同时使用存储过程数据更加安全,支付功能均采用存储过程对数据进行处理。

语法:

CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过程体

DROP PROCEDURE IF EXISTS 过程名;
创建存储过程
DELIMITER //            -- 可以不写,end后写;
CREATE 
 PROCEDURE  过程名(参数)
 BEGIN
	过程体
 END//
DELIMITER;
参数权限

in:参数的值不能返回,可以使用,类似函数传递值的使用,默认为in。
out:参数的值可以用来返回,在存储过程中为null,可以给他赋值返回。
inout:参数的值可以使用,可以用来返回,类似函数传递地址使用。

定义变量

语法:SET 变量名 = 变量值 [,变量名= 变量值 …] / DECLEAR 变量名 = 变量值 变量类型 【default 默认值】
set赋值的为全局变量,加@,declear声明的为局部变量,不加@。
用户变量一般以@开头
注意:滥用用户变量会导致程序难以理解及管理

CREATE 
 PROCEDURE  过程名(参数)
 BEGIN
  	-- 定义变量
    DECLARE 变量名 类型 [DEFAULT 0]默认值;  
    	过程体
 END;
if判断

if 条件 then 语句1 else 语句2 end if;

 IF t_error = 1 THEN  --判断
            ROLLBACK;  --回滚
        ELSE  
            COMMIT;  --提交
        END IF; 
while循环
DECLARE  变量名  int  DEFAULT 0 ; 
	WHILE 变量名<5 DO
			INSERT INTO smbms_type(typename,typepid) values("1",1);
			set i = i+1;
	end WHILE;
在存储过程使用事务

CREATE 
 PROCEDURE  过程名(参数)
 BEGIN
DECLARE t_error INTEGER DEFAULT 0;  --定义变量
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  --异常时触发
  START TRANSACTION;  --开启事务

		-- 过程体
      IF t_error = 1 THEN  --判断
            ROLLBACK;  --回滚
        ELSE  
            COMMIT;  --提交
        END IF;  
Select  t_error ; --返回状态

 END;
在存储过程中使用其他表的数据
select typename into @tn from smbms_type where typeid = 2;
调用存储过程
Call 过程名(参数.....)

触发器

触发器是指对数据进行 增删改 的 **之前 **或者 **之后 **对数据的处理,语法与存储过程相似。(为一张表绑定一段sql,表进行增删改后自动触发sql)
一般删除之前对数据进行处理,用关键字old.属性代表之前的值,增加或修改之后对数据进行处理,用new.属性代表之前的值。例如:删除课程表course的c_id之前删除成绩表score的c_id对应的数据。
新增成绩之后,在课程表添加课程信息。

使用触发器:

设计表,对某一个属性添加触发器,在下栏定义写操作体,begin end不加;在内部添加语句。(没有提示)

delimiter 自定义结束符号
create trigger 触发器名字 触发时间 触发事件 onfor each row
begin
    -- 触发器内容主体,每行用分号结尾
end
自定义的结束符合

delimiter ;

在这里插入图片描述

删除触发器:

触发器不能修改,只能删除
语法:drop trigger + 触发器名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值