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 ;
    一个人静静坐在电脑面前写代码的感觉,那是什么感觉?那是武林高手闭关修炼的感觉。
  • 相关阅读:
    cs231n线性分类器作业 svm代码 softmax
    Canopy聚类算法
    python numpy
    thingsboard在windows下安装和使用
    用css布局的方法实现如果字符超过一定长度就显示成省略号
    sql2008以上行转列的方法
    sql 2005,2008开启bcp的方法嗯哈步骤
    关于数据库中的科学计数法的处理
    错误:The Controls collection cannot be modified because the control contains code blocks (i.e. ). .
    ORACLE连接字符串里每个参数的具体意思
  • 原文地址:https://www.cnblogs.com/bieanju/p/4873591.html
Copyright © 2011-2022 走看看