mysql的触发器同数据库多表的数据操作

mysql的触发器同 数据库多表的数据操作
 
摘要: 为了不改原有代码,实现客户端和服务端数据同步,为每个需要同步数据的表加上触发器。 介绍一下这个是对同一数据库中不同表的操作。在一张表中操作时,需要对其他表进行修改操作。
 
一.触发器的基本语法:
 
1、命名规则
 
?
1
2
3
4
5
6
7
8
9
CREATE TRIGGER BEFORE<触发器名称> <{//触发器必须有名字,最多64个字符,可能后面会附有分隔符
 
   | AFTER }  //触发器触发时间是在事件之前触发还是之后触发(也可以在过程中触发)
 
{
 
INSERT | UPDATE | DELETE  //触发器三种事件
 
}

 

ON <表名称>FOR EACH ROW<触发器SQL语句>  //语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样
 
2、触发器的创建
 
不能给同一张表的同一个事件安排两个触发器,但是可以给同张表定义多个触发器(如:在同一张表对Insert事件定义一个触发器,对update再定义一个触发器)
 
3、基本的设置
 
?
1
2
3
4
5
6
给触发器设置权限:Gank create trigger on <表名> to 用户。
 
 
回收权限: Revoke create trigger on 表明 from 用户
 
删除触发器: drop TRIGGER 触发器名

 

 
MyISAM:不支持事务,用于只读程序提高性能  
InnoDB:支持ACID事务、行级锁、并发  
Berkeley DB:支持事务 
 
二:触发器语句
 
背景:在不修改原工程的情况去做安卓端和服务端的同步操作。为已经存在的项目里面的数据库建张表ict_table_version,然后在需要同步的表上加上一个字段version。(同步方案看文档)。
 
在需要同步的表上创建触发器。当表进行事物操作时,此表上的rowversion字段取最大值+1,同时ict_table_version表里面的version+1。语句:
 
?
1
2
3
4
5
6
7
8
CREATE TRIGGER ilt_tak_trigger before update // after 出错不知为何
 
ON ilt_tak
 
FOR each row
 
 
begin

 

 
SET new.rowversion = (select max(rowversion)+1 from ict_tak) ;//new是获取前期记录标识。对于Insert语句,只有new是合法的,对于deleted语句,只有old是合法的。对于update语句两者都可以使用。
 
?
1
2
3
UPDATE ict_table_version  SET version = version+1 WHERE table_name= 'ict_tak' ;//对其它表操作
 
end

 

 
注意在操作两条语句间没有用“and”而是用“;”。
 
在End前面加上exception  when...then...异常处理语句  End 对异常进行处理。同样,在End前面还可以加上事物回滚。 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值