基于其他表视图创建的表是否会随源表变更自动同步更新?
基于视图创建的新表是否会随源表自动更新?
答案是不一定,取决于你基于视图创建新表的具体实现方式,两种常见场景对应不同结果:
- 场景1:通过视图创建普通独立物理表
也就是你使用类似CREATE TABLE new_table AS SELECT * FROM your_view的语法建表,这种情况完全不会自动同步。
本质上建表时只是把执行语句瞬间视图返回的查询结果,作为快照一次性写入新的物理表,新表和源表、原视图没有任何绑定关联。后续源表的增删改操作、甚至原视图被删除,都不会影响这张新表的已有数据。
如果你需要这类表和源表保持数据一致,需要自行实现同步逻辑:比如给源表加触发同步的触发器、写定时任务定期重刷数据、接入数据同步工具做增量同步等。 - 场景2:创建的是物化视图(特殊预计算存储结构,本质也是将视图查询结果持久化为物理存储)
这类结构是否自动同步取决于你建表时的配置:- 若你选择
ON COMMIT自动刷新模式:源表的修改事务提交后,物化视图会自动同步更新,实时性高但会额外增加源表写操作的性能开销 - 若你选择按需/定时刷新模式:只有你手动执行刷新命令、或到达预设的定时刷新时间点,物化视图的数据才会和源表同步
- 若你选择
注意:不是所有数据库都支持物化视图特性,MySQL 8.0及之前的原生版本没有内置物化视图功能,PostgreSQL、Oracle、SQL Server等主流商业/开源数据库支持该特性。
内容的提问来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

