触发器,存储过程 和 视图初识

触发器

触发器作用:当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成
需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据

    -- 创建触发器(添加)
    CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW   
         INSERT INTO test_log(content) VALUES('员工表插入了一条记录');

    -- 创建触发器(修改)
    CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW    
         INSERT INTO test_log(content) VALUES('员工表修改了一条记录');
     
    -- 创建触发器(删除)
    CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW  
         INSERT INTO test_log(content) VALUES('员工表删除了一条记录');


    tri_empAdd:标识触发器名称,用户自行指定;
    AFTER:标识触发时机,取值为 BEFORE 或 AFTER;( 之前 或 之后 )
    NSERT:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
    employee :标识建立触发器的表名,即在哪张表上建立触发器;
    trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条

存储过程

  • 基本格式

      -- 声明结束符
      -- 创建存储过程
      DELIMITER $  -- 声明存储过程的结束符
      CREATE PROCEDURE pro_test()    --存储过程名称(参数列表)
      BEGIN
          -- 可以写多个sql语句;      -- sql语句+流程控制
          SELECT * FROM employee;
      END $  -- 结束 结束符
    
      -- 执行存储过程
      CALL pro_test();   -- CALL 存储过程名称(参数);
    
      -- 删除存储过程
      DROP PROCEDURE pro_test;
    
      参数:
      IN:   表示输入参数,可以携带数据带存储过程中
      OUT: 表示输出参数,可以从存储过程中返回结果
    
  • 带有输入参数的存储过程

      需求:传入一个员工的id,查询员工信息
    
      DELIMITER $
      CREATE PROCEDURE pro_findById(IN eid INT)  -- IN: 输入参数
      BEGIN
          SELECT * FROM employee WHERE id=eid;
      END $ 
    
      -- 调用
      CALL pro_findById(4);
    
  • 带有输出参数的存储过程

      DELIMITER $
      CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20))  -- OUT:输出参数
      BEGIN
              -- 给参数赋值
          SET str='hellojava';
      END $
    
  • 带有输入输出参数的存储过程

      DELIMITER $
      CREATE PROCEDURE pro_testInOut(INOUT n INT)  -- INOUT: 输入输出参数
      BEGIN
         -- 查看变量
         SELECT n;
         SET n =500;
      END $
    
      -- 调用
      SET @n=10;
    
      CALL pro_testInOut(@n);
    
      SELECT @n;
    
  • 带有条件判断的存储过程

      需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”;
      
      DELIMITER $
      CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
      BEGIN
          IF num=1 THEN
              SET str='星期一';
          ELSEIF num=2 THEN
              SET str='星期二';
          ELSEIF num=3 THEN
              SET str='星期三';
          ELSE
              SET str='输入错误';
          END IF;
      END $
    
      --调用
      CALL pro_testIf(4,@str);
       
      SELECT @str;
    
  • 带有循环功能的存储过程

      需求: 输入一个整数,求和。例如,输入100,统计1-100的和
    
      DELIMITER $
      CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
      BEGIN
          -- 定义一个局部变量
          DECLARE i INT DEFAULT 1;
          DECLARE vsum INT DEFAULT 0;
          WHILE i<=num DO
                SET vsum = vsum+i;
                SET i=i+1;
          END WHILE;
          SET result=vsum;
      END $
    
      --调用
      CALL pro_testWhile(100,@result);
    
      SELECT @result;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352