我们正在构建一个桌面应用程序,其数据库需要与 Web 应用程序数据库同步。
为此,我们采取了以下方法:
- 为了获取已修改的行,我们将这些行添加到一个空表(table_with_updates)中。
- 我们通过使用 insert=1、update=2、delete=3 等代码设置此表中的列值来维护更新。
- 为了获得更新,我们在添加/更新/删除数据的表上添加触发器。
- 添加触发器的缺点是它会减慢表上的插入和更新。为了减少这种影响,我们已经实现了 mysql 复制,我们有客户端 Web 应用程序使用主服务器添加/更新/删除数据和桌面应用程序,该应用程序从从服务器请求更新。
- 为了有一个只存储更新的表,我们向从表添加了触发器,从中获取插入/更新/删除的行。
请建议是否有更好的方法来做到这一点。
以下是问题:我们有一个包含动态列的表。因此,我们无法在触发器中指定新列。我们向该表添加了一个触发器,该触发器填充了另一个空表。
例如:Table1 列:id、col1、col2、col3、col4
表 2 列: id 、 col1 、 col2 、 col3 、 col4 、 task
以下是触发器:
DELIMITER //
Drop trigger if exists on_insert_slave;
CREATE TRIGGER `on_insert_slave` AFTER INSERT ON `table1`
FOR EACH ROW BEGIN
INSERT INTO table2 select table1.*,1 from table1 where id = NEW.id;
END//
DELIMITER ;
table2 中的最后一列用于记录 table1 中行的操作,即插入为 1,更新为 2,删除为 3
当此触发器执行时,仅填充 table2 的 id 和 col1。
提前致谢。