mysql触发器(同步表数据增删改)

起因

开发过程中偶尔会出现一种场景,两个不同服务间的数据库表格内容需要保持一致。由于要保持服务本身的独立性,不太适合使用同一个数据库。这个时候可以考虑同步数据库内容。触发器恰好可以起到这样的作用,只要写增、删、改三个触发器便可。
触发器只需写在源表内,可将更新同步至目标表。

语法

DELIMITER $
create trigger <触发器名> after <操作名(insert、delete、update)> on <源表名> for each row
begin
<sql语句>
END $;
DELIMITER ;

增加(insert)

在触发器里面有两个关键字 old和new,在insert操作的时候我们使用的是new

DELIMITER $
create trigger user_insert after insert on upms_user for each row
begin
INSERT INTO `storage`.upms_user(id,username,create_time,creator,update_time,updater) 
VALUES(new.id,new.username,new.create_time,new.creator,new.update_time,new.updater);
END $;
DELIMITER ;

删除(delete)

在where条件语句中我们需要使用的是关键字old

DELIMITER $
CREATE TRIGGER user_delete AFTER DELETE ON upms_user FOR EACH ROW
BEGIN
DELETE FROM `storage`.upms_user WHERE id=old.id;
END $;
DELIMITER ;

更新(update)

此处要注意的是,我们在字段赋值时使用的时new,在where条件中使用的old。

DELIMITER $
CREATE TRIGGER user_update AFTER UPDATE ON upms_user FOR EACH ROW
BEGIN
UPDATE `storage`.upms_user SET username=new.username,create_time=new.create_time,creator=new.creator,
update_time=new.update_time,updater=new.updater where id=old.id;
END $;
DELIMITER ;

navicat创建触发器示例

在这里插入图片描述
右击需要数据源表格,选择设计表->触发器,输入触发器名称,触发方式(After、Before),触发操作(insert、delete、update),然后在下方定义处写对应的操作即可

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 MySQL触发器功能来记录增删操作,并将操作前后的数据变化存储到另一个中,例如 log 。 以下是一个基本的示例,演示如何使用触发器记录增删操作: 1. 创建 log ,用于存储增删操作记录。 ```mysql CREATE TABLE log ( id INT NOT NULL AUTO_INCREMENT, table_name VARCHAR(50) NOT NULL, action_type ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL, old_data TEXT, new_data TEXT, modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB; ``` 2. 创建触发器,用于在增删操作时记录数据变化。 ```mysql DELIMITER // CREATE TRIGGER trigger_name AFTER INSERT ON target_table FOR EACH ROW BEGIN INSERT INTO log (table_name, action_type, new_data) VALUES ('target_table', 'INSERT', JSON_OBJECT('column1', NEW.column1, 'column2', NEW.column2, ...)); END// CREATE TRIGGER trigger_name AFTER UPDATE ON target_table FOR EACH ROW BEGIN INSERT INTO log (table_name, action_type, old_data, new_data) VALUES ('target_table', 'UPDATE', JSON_OBJECT('column1', OLD.column1, 'column2', OLD.column2, ...), JSON_OBJECT('column1', NEW.column1, 'column2', NEW.column2, ...)); END// CREATE TRIGGER trigger_name AFTER DELETE ON target_table FOR EACH ROW BEGIN INSERT INTO log (table_name, action_type, old_data) VALUES ('target_table', 'DELETE', JSON_OBJECT('column1', OLD.column1, 'column2', OLD.column2, ...)); END// DELIMITER ; ``` 上述代码中,`target_table` 示要记录增删操作的目标,`trigger_name` 触发器的名称。在触发器中,使用 `JSON_OBJECT` 函数将数据转换为 JSON 格式,并将数据记录到 log 中。`OLD` 和 `NEW` 关键字分别修改前和修改后的数据。 需要注意的是,上述代码中的 `JSON_OBJECT` 函数和 `ENUM` 类型需要 MySQL 5.7.8 及以上版本才支持。 通过以上步骤,就可以在 MySQL 中使用触发器记录增删操作,并将操作前后的数据变化存储到 log 中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值