一.触发器的基本语法: 数据库
一、命名规则 并发
CREATE TRIGGER BEFORE<触发器名称> <{//触发器必须有名字,最多64个字符,可能后面会附有分隔符 函数
| AFTER } //触发器触发时间是在事件以前触发仍是以后触发(也能够在过程当中触发) 性能
{ spa
INSERT | UPDATE | DELETE //触发器三种事件 事件
} 事务
ON <表名称>FOR EACH ROW<触发器SQL语句> //语句能够是任何合法的语句,包括复合语句,可是这里的语句受的限制和函数的同样 文档
二、触发器的建立 同步
不能给同一张表的同一个事件安排两个触发器,可是能够给同张表定义多个触发器(如:在同一张表对Insert事件定义一个触发器,对update再定义一个触发器) io
三、基本的设置
给触发器设置权限: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。语句:
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语句二者均可以使用。
UPDATE ict_table_version SET version = version+1 WHERE table_name='ict_tak';//对其它表操做
end
注意在操做两条语句间没有用“and”而是用“;”。
在End前面加上exception when...then...异常处理语句 End 对异常进行处理。一样,在End前面还能够加上事物回滚。