mysql存储过程和触发器的应用

***********【mysql 存储过程和触发器 -- 别安驹】*********************

1、什么情况下使用存储过程?

完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空闲的情况下,用存储过程是不错的选择,

1.1、简单的存储过程示例:简单写入

DELIMITER $$
USE `curl_test`$$
DROP PROCEDURE IF EXISTS `data_s`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `data_s`()

BEGIN

DECLARE i INT DEFAULT 0;

WHILE i < 1000 DO

INSERT INTO album(`artist_id`,`name`,`url`)
VALUES(i,'别安驹','2015-10-01');

SET i = i + 1;

END WHILE;

END$$
DELIMITER ;

1.2、简单的存储过程示例:关联更新

DROP PROCEDURE IF EXISTS testProcedure;
CREATE PROCEDURE testProcedure()
BEGIN
DECLARE flag INT DEFAULT 0;
DECLARE tID INT;
DECLARE tDept CHAR(255);
DECLARE tAlias CHAR(20);
DECLARE cur CURSOR FOR SELECT id,dept FROM users;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
OPEN cur;
FETCH cur INTO tID,tDept;
WHILE flag<>1 DO
SELECT alias FROM dept WHERE name = tDept INTO tAlias;
UPDATE users SET dept_alias=tAlias WHERE id=tID;
FETCH cur INTO tID,tDept;
END WHILE;
CLOSE cur;
END

存储过程的优点:

预编译,相对于直接的SQL效率会高点,同时可以降低SQL语句传输过程中消耗的流量;

简化业务逻辑,可以把需求转化给专业的DBA(如果有的话);

更方便的使用MySQL数据库事物的处理,尤其是购物类网站;

安全、用户权限更容易管理;

修改存储过程基本上不需要修改程序代码,而直接写SQL修改SQL一般都要修改相关的程序;

2、mysql触发器

触发器(trigger):监视某种情况,并触发某种操作。

触发器创建语法四要素:

2.1.监视地点(table)

2.2.监视事件(insert/update/delete)

2.3.触发时间(after/before)

2.4.触发事件(insert/update/delete)

语法:

create trigger triggerName

after/before insert/update/delete on 表名

for each row #这句话在mysql是固定的

begin

sql语句;

end;

触发器示例:"在album表新增数据的时候更新artist表的num字段减3"

DELIMITER $$

USE `curl_test`$$

DROP TRIGGER /*!50032 IF EXISTS */ `change_num`$$

CREATE
/*!50017 DEFINER = 'root'@'localhost' */


TRIGGER `change_num` AFTER INSERT ON `album` 
FOR EACH ROW BEGIN
UPDATE `artist` SET num=num-3;

END;
$$

DELIMITER ;
一个人静静坐在电脑面前写代码的感觉,那是什么感觉?那是武林高手闭关修炼的感觉。
原文地址:https://www.cnblogs.com/bieanju/p/4873591.html