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