***********【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 ;
时间: 2024-12-23 18:38:54