如何在MariaDB中创建指向最新同结构表的类视图伪表
MariaDB 实现指向最新时序表的伪表方案
方案1:手动切换(最稳妥,零额外依赖)
直接用可重定义视图实现,需要切换时执行一行语句即可:
- 首次创建指向最新表的视图(以当前最新是
fruit-feb-2021为例):
CREATE OR REPLACE VIEW fruit_latest AS SELECT * FROM `fruit-feb-2021`;
- 后续新增了更新的时序表(比如
fruit-aug-2021)需要切换时,重新执行上面的语句替换表名即可。
优势:没有额外逻辑,不会出现匹配错误,适合表新增频率不高的场景。
方案2:自动适配(无需手动操作)
如果新增时序表的频率较高,可以通过存储过程+事件调度器实现自动更新视图指向:
步骤1:创建自动更新视图的存储过程
DELIMITER // CREATE PROCEDURE update_fruit_latest_view() BEGIN DECLARE latest_table VARCHAR(64); -- 匹配命名规则为fruit-[月份缩写]-[年份]的表,按时间倒序取最新的一个 SELECT table_name INTO latest_table FROM information_schema.tables WHERE table_schema = DATABASE() -- 若不是当前库可替换为实际数据库名 AND table_name REGEXP '^fruit-[a-z]{3}-[0-9]{4}$' ORDER BY STR_TO_DATE(SUBSTRING(table_name, 7), '%b-%Y') DESC LIMIT 1; -- 重写视图 SET @dynamic_sql = CONCAT('CREATE OR REPLACE VIEW fruit_latest AS SELECT * FROM `', latest_table, '`'); PREPARE stmt FROM @dynamic_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // DELIMITER ;
注意:你示例中的
friut-feb-2021属于拼写错误,实际使用时要保证所有时序表命名严格遵循fruit-[月份英文缩写]-[4位年份]的规则,否则会匹配失败。
步骤2:手动触发更新(可选)
需要更新时直接调用存储过程即可:
CALL update_fruit_latest_view();
步骤3:配置定时自动更新(可选)
开启MariaDB事件调度器,定时执行存储过程实现完全自动化:
- 开启事件调度器(需超级用户权限):
SET GLOBAL event_scheduler = ON;
- 创建定时事件,比如每天凌晨执行一次更新:
CREATE EVENT event_auto_update_fruit_latest ON SCHEDULE EVERY 1 DAY STARTS CURRENT_DATE + INTERVAL 1 DAY DO CALL update_fruit_latest_view();
内容的提问来源于stack exchange,提问作者woniok
相关产品推荐
相关产品推荐

