java由mysql觸發器運行,mysql中觸發器的創建

本文目錄一覽:

關於mysql中的觸發器能調用JAVA嗎的搜索推薦

肯定不可以,mysql不能調用java代碼,但是可以在java中創建觸發器

1.使用SQL創建觸發器

DELIMITER $$CREATE TRIGGER `catefiles_trigger` AFTER INSERT ON `catefiles` FOR EACH ROWbegin 

declare num1 int; set num1 = (select num from est_client_catescan_status where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId); if(num1=0) then update catescan_status set num=num1+1 where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId; else insert catescan_status(cateid,num,status,taskid,clientid) values(new.cateId,1,0,new.taskid,new.clientId); end if; end$$

2.在Java程序里創建觸發器

String sql=+” CREATE TRIGGER catefiles_trigger AFTER INSERT ON catefiles FOR EACH ROW”

+” begin”

+” declare scannum int;”

+” set scannum = (select num from est_client_catescan_status where” 

+” cateid=new.cateId and taskid=new.taskId and clientid=new.clientId);”

+” if(scannum=0) then”

+” update catescan_status set num=scannum+1  where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId;”

+” else” 

+” insert catescan_status(cateid,num,status,taskid,clientid) values(new.cateId,1,0,new.taskid,new.clientId);”

+” end if;”

+” end”;

Connection con = DbConnectionManager.getConnection();

PreparedStatement  pstmt = con.prepareStatement(sql);

pstmt.execute();

3.可以看出區別:在java中創建觸發器,不需要限定符DELIMITER ,加上的話執行過程中會報MySQL語法錯誤

java如何調用MySQL的觸發器

觸發器顧名思意就是在某個動作執行時自動觸發執行的,不用調用,比如你是在add和delete數據時加觸發器,只要你定義的對,數據庫在向你指定的那張表add和delete數據時,該觸發器就會自動觸發

java中怎麼創建mysql的觸發器

2.在Java程序里創建觸發器

String sql=+” CREATE TRIGGER catefiles_trigger AFTER INSERT ON catefiles FOR EACH ROW”

+” begin”

+” declare scannum int;”

+” set scannum = (select num from est_client_catescan_status where”

+” cateid=new.cateId and taskid=new.taskId and clientid=new.clientId);”

+” if(scannum=0) then”

+” update catescan_status set num=scannum+1 where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId;”

+” else”

+” insert catescan_status(cateid,num,status,taskid,clientid) values(new.cateId,1,0,new.taskid,new.clientId);”

+” end if;”

+” end”;

Connection con = DbConnectionManager.getConnection();

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.execute();

mysql觸發器

觸發器只有經事件觸發後才能執行,上面對時間的判斷在觸發器裡面,沒有事件觸發是不會運行的,這種情況一般利用mysql的事務調度器(event scheduler)和存儲過程比較容易實現。具體如下:

事務調度器

CREATE EVENT `del_lclass_tbl ` ON SCHEDULE EVERY 1 DAY STARTS ‘2009-05-11 01:00:00’ ON COMPLETION NOT PRESERVE ENABLE DO call sp_delete_lclass_tbl(null);

存儲過程

delimiter $

drop procedure if exists sp_delete_lclass_tbl;$

create procedure sp_delete_lclass_tbl()

begin

delete from lclass_tbl where lClass_nStatus in (1,3)

and lClass_nExecuteID in (select PPI_NID from planpracticeitem_tbl where ppi_sApplicationEndDate now());

end;$

delimiter ;

mysql觸發器原生支持調用外部程序么

mysql 通過函數執本地命令、外部程序

昨天接到一個需求,要求在mysql的觸發器中執行一個外部程序。

一開始沒有什麼頭緒,後來發現嘿嘿。

id=211

有個叫mysqludf的一個東西,用起來還不錯。

不過這個東西僅僅在linux下試了試,效果還行。

步驟如下:

一、解壓附件的壓縮包之後

如果不想自己編譯的話,把lib_mysqludf_sys.so文件放到 mysql的lib/mysql/plugin/

目錄下。

二、執行chcon -t texrel_shlib_t mysql/lib/mysql/plugin/lib_mysqludf_sys.so

三、創建函數

DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;

DROP FUNCTION IF EXISTS sys_get;

DROP FUNCTION IF EXISTS sys_set;

DROP FUNCTION IF EXISTS sys_exec;

DROP FUNCTION IF EXISTS sys_eval;

CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_get RETURNS string SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_set RETURNS int SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_exec RETURNS int SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_eval RETURNS string SONAME ‘lib_mysqludf_sys.so’;

四、測試

1、準備sh文件

在linux系統中執行下面的命令

su mysql

mkdir /mysqlUDFtest

cd mysqlUDFtest

vi test.sh

#/bin/sh

date testlog.txt

chmod +x ./test.sh

2、準備數據庫表和觸發器

選擇一個數據庫執行如下命令:

CREATE TABLE test1(a1 INT) type=InnoDB;

CREATE TABLE test2(a2 INT) type=InnoDB;

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY) type=InnoDB;

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

) type=InnoDB;

DELIMITER |

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`testref`|

create trigger `test`.`testref` BEFORE INSERT on `test`.`test1`

for each row BEGIN

DECLARE done INT DEFAULT 999;

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

set done = sys_exec(“/mysqlUDFtest/test.sh”);

IF done != 0 then

INSERT INTO `$amp;amp ;$gt;22.t3`=”” (a,b); end=”” if;END;

|

Mysql觸發器可以調用Java或者js程序嗎

調用js就有點複雜了

調用java用輪循的方式,java循環去查數據庫,根據相應的規則執行java代碼

原創文章,作者:RKKK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/139903.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RKKK的頭像RKKK
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論