首頁 > 資料庫 > mysql教程 > mysql自定义存储过程和触发器

mysql自定义存储过程和触发器

WBOY
發布: 2016-06-07 15:01:36
原創
1109 人瀏覽過

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 mysql 自定义存储过程和触发器 --存储过程示范 DROP PROCEDURE IF EXISTS PRO_TEST; CREATE PROCEDURE PRO_TEST(IN NUM_IN INT,OUT NUM_OUT INT,INOUT NUM_INOUT) BEGIN //DO ANYTHING YOU WANT EN

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  mysql 自定义存储过程和触发器

  --存储过程示范

  DROP PROCEDURE IF EXISTS PRO_TEST;

  CREATE PROCEDURE PRO_TEST(IN NUM_IN INT,OUT NUM_OUT INT,INOUT NUM_INOUT)

  BEGIN

  //DO ANYTHING YOU WANT

  END;

  参数解释:

  in : 就是输入参数,输入参数是会被传入到存储过程作为参数使用,改变它的值将不会改变其原本值,相当于是值传递

  out: 此为输出参数,在存储过程中为给其值时,哪怕之前传入值,其值也只是NULL,相当于是在存储过程中新建一个值并付给out参数并输出

  inout:此为输入输出参数,可以理解为前两者之和,最为简单的就是理解为按照对象传递

  在命令行中如何调用:

  SET @NM_IN=1,@NM_OUT=2,@NM_INOUT=3;

  call PROC_TEST(@NM_IN,@NM_OUT,@NM_INOUT);

  在java中如何调用:

  想办法得到connection,在hibernate中为getSession()。connection();

  使用Java.Sql.CallableStatemet call=connection()。prepareStatement("call PROC_TEST(1,2,3)");

  call.executeQuery()将返回ResultSet对象,call.executeUpdate()将会返回受影响的行数。

  --触发器示例

  触发器按照触发类型可分为:INSERT,UPDATE,DELETE触发器,

  按照触发时间可分为:BEFORE,AFTER,

  按照内容新旧可分为:OLD,NEW,其中删除操作只有OLD,新增操作只有NEW,修改操作两者皆有

  eg:没修改user表一次,就往user_back表插入修改之前和修改之后的数据:

  CREATE TRIGGER TRI_UPGRADE_USER BEFORE UPDATE ON USER FOR EACH ROW

  BEGIN

  INSERT INTO USER_BACK(USERNAME,USERPWD) VALUES(OLD.USERNAME,OLD.USERPWD);

  INSERT INTO USER_BACK(USERNAME,USERPWD) VALUES(NEW.USERNAME,NEW.USERPWD);

  END;

  这样就搞定了

mysql自定义存储过程和触发器

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板