SQL——存储过程、触发器

存储过程

概念

用于编写能够完成某项工作的一组SQL语句集合,其中包括一些T-SQL(Trasaction-SQL)语句来接收数据、操作数据、逻辑判断,存储过程经过编译后,存储在数据库中,可以直接调用。存储过程可编程可修改,多次执行不会重复编译,所以提高了查询速度。本篇主要讲述MySQL中创建和调用存储过程。

创建和调用格式

/*DELIMITER声明分隔符为 // */
DELIMITER //
CREATE PROCEDURE a(IN b char(20))
BEGIN

    SELECT b;
END//
/*分隔符还原*/
DELIMITER ;

/*调用存储过程*/
SET @str = 'helloworld';
CALL a(@str);

/*删除存储过程*/
DROP PROCEDURE a;

(1) 修改分隔符,因为原来的语句分隔符为”;”,所以MySQL会将存储过程当做SQL语句执行,这样存储过程中的SQL语句会在创建时就执行,报错。改成“//”后就不会执行以”;” 结尾的SQL语句,在创建完存储过程之后要将分隔符重新修改成”;”。
(2)存储过程的程序体包含在BEGIN…END中。
(3)通过call关键字调用存储过程,在调用时如果有参数列表,要传入参数。

触发器

概念

触发器是关联一个表的数据对象,他不用手动调用。当其关联表触发了触发器声明的特殊操作时,会自动激活触发器,执行触发器中的SQL语句。触发器是一类特殊的存储过程,当有操作影响到关联表时,触发器自动执行。

触发器的创建

(1)创建a表
CREATE TABLE a
(
    info DATE
);

(2)创建b表
CREATE TABLE b
(
    id INT AUTO_INCREMENT,
    NAME VARCHAR(40),
    PRIMARY KEY (id)
);

(3)创建触发器关联b表,使每次b表有数据插入时,都在a表中插入插入数据的时间。
DELIMITER //
CREATE TRIGGER mytrigger
AFTER INSERT
ON b
FOR EACH ROW
BEGIN
    INSERT INTO a(info) VALUE(NOW());
END//
DELIMITER ;

(4)测试结果

INSERT INTO b VALUES(2,'老王')

表b:
这里写图片描述
表a:
这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值