程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql自定義存儲過程和觸發器

mysql自定義存儲過程和觸發器

編輯:MySQL綜合教程

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;
	
	這樣就搞定了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved