SQL——存储过程、触发器

时间:2022-03-24 05:10:17

存储过程

概念:用于编写能够完成某项工作的一组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:

SQL——存储过程、触发器

表a:

SQL——存储过程、触发器