概述
最近业务需要在写入数据和更新数据的时候,去计算某些字段的值,一开始想的是程序拿到一步步计算,一条记录进行存储得时候,还可以,但是涉及到用户量多和批量导入之后,效率就太慢了,所以决定使用触发器去进行操作。
首先还是了解一下什么是触发器!
简单点说,触发器就是往一个表插入、修改、删除数据的时候,执行提前定义好的sql语句,比如两个字段的值进行相加。
触发器的坏处
1.触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。
2.不利于维护,如果有不清楚逻辑的人接手项目,会造成困惑,我个人认为,如果一个人没有用过触发器,并且代码中没有写注释,没有人告知的话,是不明白到底在哪步进行相加的,和mysql的存储过程相似,但是存储过程至少是使用call调用的,所以还是可以找到的。
接下来就是使用Java去创建触发器。。。
项目是boot框架,但是我一开始将在navicat中写的触发器语句,粘贴到Java中去使用的时候,发现可以创建触发器成功,但是创建之后,就无法往改变写入修改数据了,提示是某个字段不存在,但是明明是有的,将触发器去除,插入数据恢复正常。
最终我使用了最原始的方式,使用jdbc去创建触发器,
Connection connection = null;
Statement stmt = null;
try{
// 注册 JDBC 驱动
Class.forName(driverClassName);
// 打开链接
System.out.println("连接数据库...");
connection = DriverManager.getConnection(url,USER,PASS);
PreparedStatement prepareStatement = connection.prepareStatement(trigger);
prepareStatement.executeUpdate();
connection.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
}
代码中一些url是从配置文件取得,不再叙述,tiggeer就是触发器得语句。
String trigger = "create TRIGGER tigger"+time+" before insert on "+tableName+
" for each row begin "+修改语句+"end" ;
String updateTrigger = "create TRIGGER tigger"+updateTime+" before update on "+tableName+
" for each row begin "+修改语句+"end" ;
上面得两个就是插入和修改时候得语句,大家可以根据自己得情况取进行更改
修改语句得话,在这里要注意格式为 举例:::set new.1jiage=new.2jiage+new.3jiage
time字段的话,因为触发器名字不能重复,我取的是时间戳。
如何查看触发器
1.在navicat中我们可以通过show TRIGGERS; 命令进行查看触发器
2.可以通过设计表,在触发器一栏中查看!
由于项目时间比较紧迫,最终使用的jdbc创建的触发器,如果大家有成功创建成功的boot的,可以分享一下。
最后
以上就是鳗鱼咖啡为你收集整理的Java创建mysql触发器的全部内容,希望文章能够帮你解决Java创建mysql触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复