zoukankan      html  css  js  c++  java
  • 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 ;
    一个人静静坐在电脑面前写代码的感觉,那是什么感觉?那是武林高手闭关修炼的感觉。
  • 相关阅读:
    [状压dp][spfa] Jzoj P3737 挖宝藏
    [计算几何] Jzoj P3736 数学题
    [排序][vector] Jzoj P6288 旋转子段
    [区间dp] Jzoj P6287 扭动的树
    [bfs][spfa] Jzoj P6286 走格子
    [点分治] Luogu P2664 树上游戏
    [树链剖分][树状数组] Luogu P3676 小清新数据结构题
    [计算几何][dp] Luogu P1995 智能车比赛
    [后缀数组][并查集] Luogu P2178 品酒大会
    [莫比乌斯反演][整除分块] Bzoj P2301 Problem b
  • 原文地址:https://www.cnblogs.com/bieanju/p/4873591.html
Copyright © 2011-2022 走看看