欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-05-21 18:18:00
...
bitsCN.com

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

摘要: 为了不改原有代码,实现客户端和服务端数据同步,为每个需要同步数据的表加上触发器。 介绍一下这个是对同一数据库中不同表的操作。在一张表中操作时,需要对其他表进行修改操作。

一.触发器的基本语法:

1、命名规则

CREATE TRIGGER BEFORE 

ON FOR EACH ROW //语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样

2、触发器的创建

不能给同一张表的同一个事件安排两个触发器,但是可以给同张表定义多个触发器(如:在同一张表对Insert事件定义一个触发器,对update再定义一个触发器)

3、基本的设置

给触发器设置权限: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_takFOR each rowbegin

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前面还可以加上事物回滚。

bitsCN.com