日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用

發(fā)布時(shí)間:2024/1/23 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

觸發(fā)器和存儲(chǔ)過(guò)程是為了提高SQL的運(yùn)行效率。

SQL語(yǔ)句先編譯、后執(zhí)行,而觸發(fā)器與存儲(chǔ)過(guò)程都會(huì)提前預(yù)編譯完成,且只編譯一次,供反復(fù)調(diào)用。

隨著時(shí)代的進(jìn)步,硬件與帶寬的提升,觸發(fā)器和存儲(chǔ)過(guò)程提升效率并不明顯,所以在傳統(tǒng)或并發(fā)量低的項(xiàng)目中已經(jīng)很少用到了。

1.觸發(fā)器

簡(jiǎn)單的作用示意:用于增刪改的時(shí)候,表關(guān)聯(lián)的連貫操作(具體根據(jù)需求的表設(shè)計(jì)定義)。以前會(huì)有人說(shuō)可以用來(lái)做日志統(tǒng)計(jì),現(xiàn)實(shí)開(kāi)發(fā)中,其實(shí)很少有人用庫(kù)表做日志。

創(chuàng)建:

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW exesql

注釋:

trigger_name  觸發(fā)器名稱

trigger_time?   觸發(fā)時(shí)間,值:BEFORE、AFTER

trigger_event  觸發(fā)事件,值:INSERT、DELETE、UPDATE

tb_name    表名稱,觸發(fā)器建立在哪個(gè)表的基礎(chǔ)上

exesql     觸發(fā)器條件滿足時(shí),執(zhí)行的sql或函數(shù)

列子:

DELIMITER $$drop trigger if existsms.trigger_test;create trigger ms.trigger_test after insert

on ms.master foreach rowbegin

INSERT INTO slave (s_id, s_content) VALUES(new.m_id,new.m_content);end$$

注:

DELIMITER $$ 定義結(jié)束符$$,意味SQL語(yǔ)句以$$結(jié)束,mysql默認(rèn);分號(hào)結(jié)束。

new表示記錄更新后的值,更新前的值用old

該腳本不可以在視圖工具Navicat或dbvisual里執(zhí)行。

必須如圖執(zhí)行

2.存儲(chǔ)過(guò)程

簡(jiǎn)單描述:存儲(chǔ)過(guò)程是一個(gè)特定的SQL語(yǔ)句集,在數(shù)據(jù)庫(kù)中只需編譯一次,重復(fù)使用。一般項(xiàng)目不建議使用存儲(chǔ)過(guò)程,維護(hù)麻煩。

優(yōu)點(diǎn):重復(fù)使用、減少網(wǎng)絡(luò)流量、防止SQL注入(關(guān)鍵)

缺點(diǎn):應(yīng)用層程序員調(diào)試麻煩、可移植性低、可擴(kuò)展性差

CREATE PROCEDURE PROCEDURE_NAME (PROCEDURE_MODE PARAM_NAME PARAM_TYPE) EXE_SQL

注釋:

PROCEDURE_NAME  存儲(chǔ)過(guò)程名字

PROCEDURE_MODE  存儲(chǔ)過(guò)程類型,有IN、OUT、INOUT

PARAM_NAME     參數(shù)引用名稱

PARAM_TYPE     ?參數(shù)類型(int、varchar、datetime等等)

EXE_SQL       ? 執(zhí)行sql語(yǔ)句

IN例子:

DELIMITER $$DROP PROCEDURE IF EXISTSms.in_procedure;CREATE PROCEDURE ms.in_procedure(IN param int)BEGIN

SELECTparam;SET param=3;SELECTparam;END$$SET @param=1;

CALL ms.in_procedure(@param);SELECT @param;

$$

注:

DELIMITER $$ 定義結(jié)束符$$,意味SQL語(yǔ)句以$$結(jié)束,mysql默認(rèn);分號(hào)結(jié)束。

該腳本不可以在視圖工具Navicat或dbvisual里執(zhí)行。

必須如圖執(zhí)行

OUT例子:

DELIMITER $$DROP PROCEDURE IF EXISTSms.out_procedure;CREATE PROCEDURE ms.out_procedure(OUT param int)BEGIN

SELECTparam;SET param=3;SELECTparam;END$$SET @param=1;

CALL ms.out_procedure(@param);SELECT @param;

$$

注:

DELIMITER $$ 定義結(jié)束符$$,意味SQL語(yǔ)句以$$結(jié)束,mysql默認(rèn);分號(hào)結(jié)束。

該腳本不可以在視圖工具Navicat或dbvisual里執(zhí)行。

必須如圖執(zhí)行

INOUT例子

DELIMITER $$DROP PROCEDURE IF EXISTSms.inout_procedure;CREATE PROCEDURE ms.inout_procedure(INOUT param int)BEGIN

SELECTparam;SET param=3;SELECTparam;END$$SET @param=1;

CALL ms.inout_procedure(@param);SELECT @param;

$$

注:

DELIMITER $$ 定義結(jié)束符$$,意味SQL語(yǔ)句以$$結(jié)束,mysql默認(rèn);分號(hào)結(jié)束。

該腳本不可以在視圖工具Navicat或dbvisual里執(zhí)行。

必須如圖執(zhí)行

3.java調(diào)用存儲(chǔ)過(guò)程

packagecom.nginx.session.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.SQLException;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.jdbc.core.CallableStatementCallback;importorg.springframework.jdbc.core.CallableStatementCreator;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)

@SpringBootTestpublic classJDBCTest {

@AutowiredprivateJdbcTemplate jdbcTemplate;

@Testpublic voidtest(){

Integer value= jdbcTemplate.execute(newCallableStatementCreator() {

@Overridepublic CallableStatement createCallableStatement(Connection con) throwsSQLException {

String storedProc= "{call ms.inout_procedure (?)}";

CallableStatement cs=con.prepareCall(storedProc);

cs.setInt(1,1);returncs;

}

},new CallableStatementCallback() {

@Overridepublic Integer doInCallableStatement(CallableStatement cs) throwsSQLException {

cs.execute();return cs.getInt(1);

}

});

System.out.println(value);

}

}

總結(jié)

以上是生活随笔為你收集整理的java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。