存储过程,函数,触发器

一,存储过程

   1,存储过程的优点: 

    .能完成复杂的判断和运算。

    .执行速度快,可以重复使用。

   2,存储过程的创建和调用

     create procedure 名称(可以有参数)

     begin

      语句...

     end;

      (可以有多个 Begin-end)

     调用存储过程 : call 存储过程名。

   3,存储过程中的变量

      .必须先声明变量,才能使用变量,一个DECLARE只能声明一个变量。

        DECLARE 变量名 数据类型 DEFAULT 默认值;

      .赋值 

       SET 变量名=值;或者注入值

         SELECT name INTO my_name from book WHERE id=11;

      .作用范围

         类似java的变量,有全局变量和局部变量之分

   4,存储过程的参数

       CREATE DEFINER = `root`@`localhost` PROCEDURE (IN id_param int,...)

      IN 类型表示该参数只用于传入,传入的值为 常量。在调用过程中 不做修改和返回

      OUT类型表示该参数可用于传出值,传入的值必须为变量。在存储过程中可以被修改和返回。

        在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。

      INOUT类型 ,兼有上两者的特性,INOUT参数可以向过程传递信息,如果值改变,则可再从过程外调用。

      如果只是把数据传给 存储过程,就用IN类型参数。

      如果只是从存储过程取返回值,就有OUT类型参数。

      如果需要把数据传给存储过程并再返回来,就用INOUT 类型。

   5,条件语句

    .if(条件)

     then

      语句...

     elseif(条件)

      then

       语句...

     else

      语句...

     end if;

   6,循环语句

    .while(条件) DO

     begin 语句...end;(可以有多个)

     END While;

    . repeat

      语句...

     until 条件

     end repeat;

   7,游标, 游标就是一个查询的结果集

   8, 在ORM框架中使用 存储过程。


二,自定义函数  

   1,函数与存储过程的不同点是 函数必须得有返回值

    create function 函数名(参数...)


三,触发器

   1,触发器相当于表的一个属性,当表中的数据发生变动时,触发器开始工作,在另一张指定的数据表中记录数据的变动

    CREATE TRIGGER dobook AFTER INSERT ON book
      FOR EACH ROW
      BEGIN
        INSERT INTO log_book(id_book,name_book,time_do)
          VALUES(new.id,new.name,NOW());
      END

    new 代表数据更新之后记录数据,old表示数据更新之前记录数据


子程序特性

   .not deterministic 说明子程序中包含有不确定的函数
   .contains sql 包含读写sql语句
   .no sql 无sql语句 (只读)
   .reads sql data 只读 的sql 语句
   . modifies sql data 只写的sql语句
   . sql security SQL的安全性

原文地址:https://www.cnblogs.com/m01qiuping/p/6395445.html