Java创建mysql触发器
最近業(yè)務(wù)需要在寫(xiě)入數(shù)據(jù)和更新數(shù)據(jù)的時(shí)候,去計(jì)算某些字段的值,一開(kāi)始想的是程序拿到一步步計(jì)算,一條記錄進(jìn)行存儲(chǔ)得時(shí)候,還可以,但是涉及到用戶(hù)量多和批量導(dǎo)入之后,效率就太慢了,所以決定使用觸發(fā)器去進(jìn)行操作。
首先還是了解一下什么是觸發(fā)器!
簡(jiǎn)單點(diǎn)說(shuō),觸發(fā)器就是往一個(gè)表插入、修改、刪除數(shù)據(jù)的時(shí)候,執(zhí)行提前定義好的sql語(yǔ)句,比如兩個(gè)字段的值進(jìn)行相加。
觸發(fā)器的壞處
1.觸發(fā)器盡量少的使用,因?yàn)椴还苋绾?#xff0c;它還是很消耗資源,如果使用的話(huà)要謹(jǐn)慎的使用,確定它是非常高效的:觸發(fā)器是針對(duì)每一行的;對(duì)增刪改非常頻繁的表上切記不要使用觸發(fā)器,因?yàn)樗鼤?huì)非常消耗資源。
2.不利于維護(hù),如果有不清楚邏輯的人接手項(xiàng)目,會(huì)造成困惑,我個(gè)人認(rèn)為,如果一個(gè)人沒(méi)有用過(guò)觸發(fā)器,并且代碼中沒(méi)有寫(xiě)注釋,沒(méi)有人告知的話(huà),是不明白到底在哪步進(jìn)行相加的,和mysql的存儲(chǔ)過(guò)程相似,但是存儲(chǔ)過(guò)程至少是使用call調(diào)用的,所以還是可以找到的。
接下來(lái)就是使用Java去創(chuàng)建觸發(fā)器。。。
項(xiàng)目是boot框架,但是我一開(kāi)始將在navicat中寫(xiě)的觸發(fā)器語(yǔ)句,粘貼到Java中去使用的時(shí)候,發(fā)現(xiàn)可以創(chuàng)建觸發(fā)器成功,但是創(chuàng)建之后,就無(wú)法往改變寫(xiě)入修改數(shù)據(jù)了,提示是某個(gè)字段不存在,但是明明是有的,將觸發(fā)器去除,插入數(shù)據(jù)恢復(fù)正常。
最終我使用了最原始的方式,使用jdbc去創(chuàng)建觸發(fā)器,
代碼中一些url是從配置文件取得,不再敘述,tiggeer就是觸發(fā)器得語(yǔ)句。
String trigger = "create TRIGGER tigger"+time+" before insert on "+tableName+" for each row begin "+修改語(yǔ)句+"end" ;String updateTrigger = "create TRIGGER tigger"+updateTime+" before update on "+tableName+" for each row begin "+修改語(yǔ)句+"end" ;上面得兩個(gè)就是插入和修改時(shí)候得語(yǔ)句,大家可以根據(jù)自己得情況取進(jìn)行更改
修改語(yǔ)句得話(huà),在這里要注意格式為 舉例:::set new.1jiage=new.2jiage+new.3jiage
time字段的話(huà),因?yàn)橛|發(fā)器名字不能重復(fù),我取的是時(shí)間戳。
如何查看觸發(fā)器
1.在navicat中我們可以通過(guò)show TRIGGERS; 命令進(jìn)行查看觸發(fā)器
2.可以通過(guò)設(shè)計(jì)表,在觸發(fā)器一欄中查看!
由于項(xiàng)目時(shí)間比較緊迫,最終使用的jdbc創(chuàng)建的觸發(fā)器,如果大家有成功創(chuàng)建成功的boot的,可以分享一下。
總結(jié)
以上是生活随笔為你收集整理的Java创建mysql触发器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android菜鸟如何学习Android
- 下一篇: LAMP环境安装与apache配置