MySQL实现从表1自动增删改同步表2的方法咨询
解决MySQL表1增删改自动同步到表2的方案
你遇到的问题很典型:一次性的INSERT ... SELECT只能批量导入一次数据,既没法自动同步后续的新增/更新/删除操作,还会因为没有重复判断导致大量冗余数据。要实现实时自动同步,MySQL的**触发器(Trigger)**是最适合的方案,它能在表1发生增、删、改操作时自动触发同步逻辑到表2。
前提准备
首先要确保表2的id字段是主键或唯一键,这样我们能通过id精准匹配表1和表2的对应记录,避免重复并保证更新/删除的准确性。如果还没设置,先执行:
ALTER TABLE table2 ADD PRIMARY KEY (id);
创建三个触发器分别处理增、改、删同步
我们需要创建3个触发器,分别对应表1的INSERT、UPDATE、DELETE操作:
1. 处理新增同步(INSERT触发器)
当表1插入新记录时,自动同步到表2;如果表2已存在对应id的记录(比如之前同步过),则更新该记录避免重复:
DELIMITER // CREATE TRIGGER sync_table1_to_table2_insert AFTER INSERT ON table1 FOR EACH ROW BEGIN INSERT INTO table2 (id, title, sku, brand) VALUES (NEW.id, NEW.title, NEW.sku, NEW.brand) ON DUPLICATE KEY UPDATE title = NEW.title, sku = NEW.sku, brand = NEW.brand; END // DELIMITER ;
2. 处理更新同步(UPDATE触发器)
当表1的记录被更新时,自动更新表2中对应id的记录:
DELIMITER // CREATE TRIGGER sync_table1_to_table2_update AFTER UPDATE ON table1 FOR EACH ROW BEGIN UPDATE table2 SET title = NEW.title, sku = NEW.sku, brand = NEW.brand WHERE id = NEW.id; END // DELIMITER ;
3. 处理删除同步(DELETE触发器)
当表1的记录被删除时,自动删除表2中对应id的记录:
DELIMITER // CREATE TRIGGER sync_table1_to_table2_delete AFTER DELETE ON table1 FOR EACH ROW BEGIN DELETE FROM table2 WHERE id = OLD.id; END // DELIMITER ;
额外说明
- 触发器是行级触发,表1每一行的增删改操作都会触发同步,确保数据实时一致。
- 如果你需要给表2的
code1、code2字段设置默认值或其他业务逻辑,可以在触发器中补充(比如code1 = DEFAULT或者关联其他表赋值)。 - 测试时可以依次执行表1的增、改、删操作,检查表2的数据是否同步变化。
- 创建触发器需要
TRIGGER权限,确保执行SQL的账号拥有该权限。
内容的提问来源于stack exchange,提问作者CSM Media
相关产品推荐
相关产品推荐

