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

博客访问: 918210
博文数量: 111
博客积分: 1897
博客等级: 上尉
技术积分: 1705
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Mysql/postgreSQL
& 最近一个项目,需要我在操作某个表的时候,记录下某个记录,方便以后可以查询,关于mysql的触发器的详细内容,可以看这篇官方文章/doc/refman/5.5/en/create-trigger.html,里面介绍得很详细。& 在做 日记的时候,我定义了一个记录操作的表,然后把一些自己比较关心的操作进行了log,书写了对应了触发器,记录相关的日记。& 我定义的日记的demo如下:DROP
TRIGGER IF EXISTS
delete_image_trigger;CREATE TABLE if not exists `operlog` (&&`id` int(11) NOT NULL AUTO_INCREMENT,&&`operation` varchar(45) DEFAULT NULL,&&`operTime` datetime DEFAULT NULL,&&`info` varchar(100) DEFAULT NULL,&&`operlogcol` varchar(45) DEFAULT NULL,&&PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;delimiter | CREATE TRIGGER delete_image_trigger BEFORE DELETE ON image&&FOR EACH ROW BEGINset @operation = "delete_localimage";set @operTime = NOW();set @info = OLD.imageUrl;insert into operlog(operation,operTime,info)value(@operation,@operTime,@info);&&END;|delimiter $$上面加黄色部分的需要特别注意,因为原先我是直接书写这些sql代个码的,没有去注意黄色部分,导致总是出现语法错误,说少了“;”,后来去官方拿了它的demo来用。才解决了这个问题。
阅读(3849) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。mysql创建触发器的详细过程 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 16时,
mysql中创建触发器,当更新表的一条数据后,触发事件-&更新另一表的数据。使用实例:触发器用处还是很多的,比如校内网、开心网、Facebook,你发一个日志,自动通知好友,其实就是在增加日志时做一个后触发,再向通知表中写入条目
代码片段(4)
1.&[代码]创建两个测试表&&&&
drop table if exists tab1;
create table tab1 (
tab1_id int
drop table if exists tab2;
create table tab2 (
tab2_id int
2.&[代码]向tab1插入一条数据时,触发事件,同时向tab2中插入一条记录&&&&
drop trigger if exists t_afterUpdate_on_tab1;
create trigger t_afterUpdate_on_tab1 after update on tab1 for each row
insert into tab2 values(new.tab1_id);
3.&[代码]从tab1删除一条数据时,触发事件,同时从tab2中删除一条记录&&&&
drop trigger if exists t_afterDelete_on_tab1;
create trigger t_afterDelete_on_tab1 after delete on tab1 for each row
delete from tab2 where tab2_id = old.tab1_
4.&[代码]创建存储过程,向tab1中插入100条记录&&&&
drop procedure if exists bach_insert_tab1;
delimiter|
create procedure bach_insert_tab1()
declare v int default 0;
while v&100
insert into tab1 values(v);
set v=v+1;
-- 调用存储过程
call bach_insert_tab1();
开源中国-程序员在线工具:
相关的代码(49)
1回/1126阅
0回/1780阅
开源从代码分享开始
moyd的其它代码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触发器的删除,你如果对MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。
  1、创建MySQL触发器:
  CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name
  FOR EACH ROW
  trigger_stmt
  CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name
  FOR EACH ROW
  trigger_stmt
  CREATE TRIGGER SetUserHome after insert ON users
  FOR EACH ROW
  update `users` set homeLocationX = 128,
  homeLocationY=128, homeLocationZ=30
  where uuid = NEW.uuid
  以上的例子是错误的, 让本表进行触发时进行更新会让程序进入死循环。
  系统会报这样的错误:it is already used by statement which invoked this stored function/trigger.
  应该改成以下语句:
  CREATE TRIGGER SetUserHome before insert ON users
  FOR EACH ROW
  set New.homeLocationX = 128;
  set New.homeLocationY = 128;
  set New.homeLocationZ=30;
  大写的为关键字
  trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:MySQL触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;
  trigger_time:触发时间(BEFORE或AFTER)
  trigger_event:事件名(insert或update或delete)
  tbl_name:表名(必须是永久性表)
  trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。
  2、删除解发器
  语法:
  DROP TRIGGER [schema_name.]trigger_
  注意:以上操作均需SUPER权限
  示例:
  DROP TRIGGER t_wiley_hotelComment_
  delimiter //
  CREATE TRIGGER t_wiley_hotelComment_bu BEFORE UPDATE ON hotel_comment
  FOR EACH ROW
  IF OLD.ispass=0 && NEW.ispass=1 THEN
  UPDATE hotel_info SET sumcommentsumcomment=sumcomment+1,
  sumconsumesumconsume=sumconsume+NEW.consume,sumservicesumservice=sumservice+NEW.service,
  sumroomsumroom=sumroom+NEW.room,sumentironsumentiron=sumentiron+NEW.entironment,
  totaltotal=total+(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_
  ELSEIF OLD.ispass=1 && NEW.ispass=0 THEN
  UPDATE hotel_info SET sumcommentsumcomment=sumcomment-1,
  sumconsumesumconsume=sumconsume-NEW.consume,sumservicesumservice=sumservice-NEW.service,
  sumroomsumroom=sumroom-NEW.room,sumentironsumentiron=sumentiron-NEW.entironment,
  totaltotal=total-(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_
  END IF;
  END;//
  以上的相关内容就是对MySQL触发器的使用的介绍,望你能有所收获。
[ 责任编辑:娜娜 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte

我要回帖

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

 

随机推荐