java中怎么创建mysql的java mysql触发器器

在java 中执行触发器代码、创表语句
每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐在java 中执行触发器代码、创表语句,赶紧看过来吧!
  &&& 由于程序的需要,在 中创建触发器及建表,碰到了在java 代码中执行创建触发器及表。  &&& /**建立中间表*/  &&& public static final String  &&&&&&&&&&& createMiddleTable =  &&&&&&&&&&& "CREATE TABLE [dbo].[AlarmsMiddleTbl] ( "  &&&&&&&&&&& + "&[id] [int] NOT NULL& , "  &&&&&&&&&&& + "&[DeviceID] [smallint] NULL , "  &&&&&&&&&&& + "&[Aid] [char] (10) COLLATE Chinese_PRC_BIN NULL , "  &&&&&&&&&&& + "&[BeginTime] [datetime] NULL , "  &&&&&&&&&&& + "&[EndTime] [datetime] NULL , "  &&&&&&&&&&& + "&[Severity] [char] (2) COLLATE Chinese_PRC_BIN NULL , "  &&&&&&&&&&& + "&[CondType] [char] (25) COLLATE Chinese_PRC_BIN NULL , "  &&&&&&&&&&& + "&[DetailID] [smallint] NULL , "  &&&&&&&&&&& +  &&&&&&&&&&& "&[AckNotes] [char] (150) COLLATE Chinese_PRC_BIN NULL , "  &&&&&&&&&&& +  &&&&&&&&&&& "&[Description] [char] (255) COLLATE Chinese_PRC_BIN NULL , "  &&&&&&&&&&& +  &&&&&&&&&&& "&[Systemtimes] [char] (30) COLLATE Chinese_PRC_BIN NULL "  &&&&&&&&&&& + ") ON [PRIMARY] ";  &  &  &&& /**在告警表上创建触发器*/  &&& public static final String createMiddleTblTriggerSQL =  &&&&&&&&&&& "CREATE&& TRIGGER t_alarms "  &&&&&&&&&&& + "ON [NTBW].[dbo].[Alarms] "  &&&&&&&&&&& + "FOR INSERT, UPDATE "  &&&&&&&&&&& + "AS "  &&&&&&&&&&& + "DECLARE& @rows int "  &&&&&&&&&&& + "SET @rows =& @@rowcount "  &&&&&&&&&&& + "IF @rows = 0 "  &&&&&&&&&&& + "& return "  &&&&&&&&&&& +  &&&&&&&&&&& "IF EXISTS(SELE 1 F inserted) AND NOT EXISTS(SELECT 1 FROM deleted) "  &&&&&&&&&&& + "BEGIN "  &&&&&&&&&&& + "& INSERT INTO [NTBW].[dbo].[AlarmsMiddleTbl] "  &&&&&&&&&&& + "& SELECT i.[id], i.[DeviceID], i.[Aid], i.[BeginTime], "  &&&&&&&&&&& +  &&&&&&&&&&& "& i.[EndTime], i.[Severity], i.[CondType], i.[DetailID], i.[AckNotes], "  &&&&&&&&&&& + "& i.[Description], getdate() from inserted i "  &&&&&&&&&&& + "END "  &&&&&&&&&&& +  &&&&&&&&&&& "IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted) AND "  &&&&&&&&&&& + " UPDATE(EndTime) "  &&&&&&&&&&& + "BEGIN "  &&&&&&&&&&& + "& INSERT INTO [NTBW].[dbo].[AlarmsMiddleTbl] "  &&&&&&&&&&& + "& SELECT i.[id], i.[DeviceID], i.[Aid], i.[BeginTime], "  &&&&&&&&&&& +  &&&&&&&&&&& "& i.[EndTime], i.[Severity], i.[CondType], i.[DetailID], i.[AckNotes], "  &&&&&&&&&&& + "& i.[Description], getdate() from inserted i "  &&&&&&&&&&& + "END "  &&&&&&&&&&& + "IF @@error
0 "  &&&&&&&&&&& + "BEGIN "  &&&&&&&&&&& + "& RAISERROR('ERROR',16,1) "  &&&&&&&&&&& + "& rollback transaction "  &&&&&&&&&&& + "& return "  &&&&&&&&&&& + "END ";  &  &  &  &  &  JAVA中执行以上语句过程:  view plaincopy to clipboardprint?  /**&   &  &* 创建中间表或者触发器&   &  &*&   &  &* @param sql String&   &  &* @return boolean 返回语句执行结果,true 成功,false 失败&   &  &*/&   &   private boolean createTableOrTrigger(String sql)&&   &   {&&   &   &&& Connection con =&&   &   &&& PreparedStatement st =&&   &   &&& boolean result =&&   &   &&& try&   &   &&& {&&   &   &&&&&&& con = dbh.getConnection();&&   &   &&&&&&& st = con.prepareStatement(sql);&&   &   &&&&&&& st.execute();&&   &   &&&&&&& result =&&   &   &&&&&&& dbh.closeConnections(null, st, con);&&   &   &&& }&&   &   &&& catch (SQLException ex)&&   &   &&& {&&   &   &&&&&&& Log.error("Unable to create :" +&&   &   &&&&&&&&&&&&&&&&& sql + " ,ErrorCode :" + ex.getErrorCode() +&&   &   &&&&&&&&&&&&&&&&& ",Exception :" +&&   &   &&&&&&&&&&&&&&&&& ex.getLocalizedMessage());&&   &   &&&&&&& dbh.closeConnections(null, st, con);&&   &   &&& }&&   &   &   &   &&&&&   &   }& & 搜索“图”或者“tulaoshi_com”加关注,每天最新的美食、、、美妆、、手工DIY等教程让你一手全掌握。推荐关注!【扫描下图可直接关注】
来源:/n/6826.html
点击查看更多与《》相关的文章>>
下面是个超简单的通过非动态SQL语句在SQL Server中执行动态查询教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~
编写一个asp代码执行器,编写一个asp代码执行器
下面图老师小编要向大家介绍下SQL Server 2008中的代码安全(二) DDL触发器与登录触发器,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!
一个简单的SQL语句执行器,一个简单的SQL语句执行器
下面是个简单易学的批量执行sql语句的方法教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!
用两行代码在浏览器中实现文件上传,用两行代码在浏览器中实现文件上传
热门搜索:
PDF文档(含加密)格式转换为可编辑的word教程
怎样拼接数码照片 PS相片处理教程
怎样在CAD里标注公差
怎么在WPS里制作带圈字符
作为猫咪的主人,我们应该知道,饮食对于猫咪是有很大的影响的。如果缺少相应的营养物质,可能会对猫咪造成很多的影响,比如说毛发没有光泽,生活无精打采等等。那么猫咪不能缺少哪几种物质?
猫咪是一种非常可爱的动物,而且非常的有个性,所以现在很多人都非常喜欢饲养宠物猫咪。作为猫咪的主人,我们应该知道,饮食对于猫咪是有很大的影响的。那么猫咪不能缺少哪几种物质?
猫咪是一种非常可爱的动物,而且非常的有个性,所以现在很多人都非常喜欢饲养宠物猫咪。作为猫咪的主人,我们应该知道,饮食对于猫咪是有很大的影响的。那么猫咪不能吃哪些东西?
羽毛球拍是常用的运动器材之一,有球柄球杆及击球面组成,击球面为网状,球杆细直。通过学习羽毛球拍简笔画知晓更多运动知识。接下来就通过学习羽毛球拍简笔画教程来了解如何绘画羽毛球拍简笔画。
怎么利用Photoshop给电商模特照片精修磨皮?很多朋友在工作中经常会遇到要求精修模特的情况,特别是做化妆品行业的电商设计师,所以总结了一下我的模特修图方法和技巧与大家分享,喜欢的朋友让我们一起来学习吧。
磨皮是我们ps照片最基本的技能,Photoshop人物磨皮是我们必须掌握的,如今不少国人对Photoshop修图的三大酷炫神技双曲线、中性灰与高低频几近痴迷,抓耳挠腮想学会它,下面一起看看教程吧。
掌握一点Photoshop教程对你是非常有用的,这篇教程是给大家分享PS简单快速创建眼睛彩虹美瞳效果方法,教程最终创建出来的效果非常漂亮,而且难度并不是很大,很值得大家学习,一起来学习吧。
2017年最受欢迎的生活服务APP!!生活服务类App的出现为日常生活带来极大便利,我们可以通过手机客户端预约各种家政服务,足不出户就能够享受实惠、便捷的生活服务,那么接下来我为大家推荐一些生活中必备生活app。
由于现在抢红包大热起来,很多app都开始支持发红包抢红包了,因此也出现了微信抢红包神器,可以自动抢微信红包,肯定比认为手动操作快,有消息就会自动打开,然后打开红包。今天就给大家分享2017微信自动抢红包神器大全。
2017手机赚钱软件排行榜!!很多朋友都在苦恼每天的钱不够话,空闲时间不知道怎么打发,总想寻找一种简单的赚钱方式,我们的手机app就有很多,下面具体给大家介绍手机赚钱软件有哪些,总有一款你中意的。
经常玩微信的朋友都知道,微信小程序已经全面上线了,对于小程序的出现是否会引发App变革众说纷纭,但不可否认的是小程序能够带给用户及产商一定的便利,那么今天为大家汇总目前上线的一些实用小程序。
男女交往一直都是人们比较关注的一个问题,都说相爱容易,相处不易,交往过的朋友应该都能深刻的体会到,女生常常抱怨着让男生理解自己,但男生也希望多体谅一下他们。尤其不要老是问一些无法回答的问题来考验他们。
很多朋友都信风水一说,对于自己家里房屋客厅的装修也是有一定要求的,因为客厅的风水关系着整个家居的运势,更关系着主人的财运与健康,因而客厅里的风水禁忌是需要我们谨慎注意的,那么风水学中客厅风水禁忌有哪些呢?
春天已经来临了,夏天也不远了,新的一才刚刚开始,时尚爱美的美眉们最关注的就是春夏服装设计的流行趋势了,早早的把握住时尚趋势走在流行的最尖端,今天就给大家整理分享2017春夏女装设计流行趋势 ,你绝对不能错过的亮点。MySQL触发器使用详解
投稿:hebedich
字体:[ ] 类型:转载 时间:
本文主要详细介绍了mysql数据库的触发器的相关知识,非常的全面,有需要的小伙伴参考下吧。
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
创建触发器
在MySQL中,创建触发器语法如下:
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。
另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。
trigger_event 详解
MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发。
LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。
REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条。
INSERT 语句,有时候等价于一条 DELETE 语句加上一条 INSERT 语句。
INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发;
UPDATE 型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发;
DELETE 型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发。
BEGIN … END 详解
在MySQL中,BEGIN … END 语句的语法为:
[statement_list]
其中,statement_list 代表一个或多个语句的列表,列表内的每条语句都必须用分号(;)来结尾。
而在MySQL中,分号是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL可以开始执行了。因此,解释器遇到statement_list 中的分号后就开始执行,然后会报出错误,因为没有找到和 BEGIN 匹配的 END。
这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法为:
DELIMITER new_delemiter
new_delemiter 可以设为1个或多个长度的符号,默认的是分号(;),我们可以把它修改为其他符号,如$:
DELIMITER $
在这之后的语句,以分号结束,解释器不会有什么反应,只有遇到了$,才认为是语句结束。注意,使用完之后,我们还应该记得把它给修改回来。
一个完整的创建触发器示例
假设系统中有两个表:
班级表 class(班级号 classID, 班内学生数 stuCount)
学生表 student(学号 stuID, 所属班级号 classID)
要创建触发器来使班级表中的班内学生数随着学生的添加自动更新,代码如下:
DELIMITER $
create trigger tri_stuInsert after insert
on student for each row
set c = (select stuCount from class where classID=new.classID);
update class set stuCount = c + 1 where classID = new.classID;
DELIMITER ;
MySQL 中使用 DECLARE 来定义一局部变量,该变量只能在 BEGIN … END 复合语句中使用,并且应该定义在复合语句的开头,
即其它语句之前,语法如下:
DECLARE var_name[,...] type [DEFAULT value]
var_name 为变量名称,同 SQL 语句一样,变量名不区分大小写;type 为 MySQL 支持的任何数据类型;可以同时定义多个同类型的变量,用逗号隔开;变量初始值为 NULL,如果需要,可以使用 DEFAULT 子句提供默认值,值可以被指定为一个表达式。
对变量赋值采用 SET 语句,语法为:
SET var_name = expr [,var_name = expr] ...
NEW 与 OLD 详解
上述示例中使用了NEW关键字,和 MS SQL Server 中的 INSERTED 和 DELETED 类似,MySQL 中定义了 NEW 和 OLD,用来表示
触发器的所在表中,触发了触发器的那一行数据。
在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;
使用方法: NEW.columnName (columnName 为相应数据表某一列名)
另外,OLD 是只读的,而 NEW 则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用(如每插入一个学生前,都在其学号前加“2013”)。
查看触发器
和查看数据库()查看表格()一样,查看触发器的语法如下:
SHOW TRIGGERS [FROM schema_name];
其中,schema_name 即 Schema 的名称,在 MySQL 中 Schema 和 Database 是一样的,也就是说,可以指定数据库名,这样就
不必先“USE database_”了。
删除触发器
和删除数据库、删除表格一样,删除触发器的语法如下:
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
触发器的执行顺序
我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务,有:
①如果 BEFORE 触发器执行失败,SQL 无法正确执行。
②SQL 执行失败时,AFTER 型触发器不会触发。
③AFTER 类型的触发器执行失败,SQL 会回滚。
小伙伴们是否对mysql的触发器的使用有所了解了呢,如有疑问,就给我留言吧,大家共同进步。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在本节中,您将学习如何使用MySQL触发器。根据定义,触发器或数据库触发器是自动执行以响应特定事件的存储程序,例如在表中发生的插入,更新或删除。
数据库触发器是保护MySQL数据库中数据完整性的强大工具。此外,自动执行某些数据库操作(如日志记录,审核等)也很有用。
1.SQL触发器简介
SQL触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,就会执行或触发SQL触发器,例如插入,更新或删除。参考阅读:
2.MySQL触发器实现
本教程将向您介绍MySQL触发器的实现。此外,还将向您展示MySQL如何在MySQL中存储触发器定义和触发器的限制。参考阅读:
3.在MySQL中创建触发器
本教程将向您展示如何在MySQL中创建一个简单的触发器来审核表的更改。我们将详细说明CREATE TRIGGER语句的语法。参考阅读:
4.为相同的触发事件和动作时间创建多个触发器
本教程将向您展示如何为MySQL中的相同触发事件和动作时间创建多个触发器。参考阅读:
5.管理MySQL中的触发器
您将学习如何管理触发器,包括在MySQL数据库中显示,修改和删除触发器。参考阅读:
6.使用MySQL计划事件
MySQL事件是基于预定义的时间表运行的任务,因此有时它被称为预定事件。MySQL事件也被称为“时间触发”,因为它是由时间触发的,而不是像触发器这样的表更新作为触发条件。参考阅读:
7.修改MySQL事件
本教程将介绍如何使用ALTER EVENT语句修改现有的MySQL事件。在本教程之后,您将了解如何修改事件计划,如何启用或禁用事件以及如何重命名事件。参考阅读:
加QQ群啦!
JAVA技术群(2000人群):
MySQL/SQL群(2000人群):
Python技术群(2000人群):
大数据开发群(2000人群): (Java,Python,R,Scala,Hadoop,Spark,zookeeper,kafka等技术)
Web开发群(新群):
(PHP,HTML/HTML5,JS/JQuery,CSS等技术)
Linux技术群(新群): (Redhat/Centos,Ubuntu,Shell,运维,监控等技术)
易百教程移动端:请扫描本页面底部(右侧)二维码关注微信公众号,或直接手机访问:
上一篇:下一篇:2015年2月 Java大版内专家分月排行榜第二2014年3月 Java大版内专家分月排行榜第二
2014年9月 Java大版内专家分月排行榜第三2014年6月 Java大版内专家分月排行榜第三2014年2月 Java大版内专家分月排行榜第三2013年11月 Java大版内专家分月排行榜第三2013年10月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2014年12月 扩充话题大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 mysql如何创建触发器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信