首页 > 解决方案 > MySQL 触发器 - 我已将它们设置为填充新表,但需要一种从现有数据中填充的方法

问题描述

标题说明了大部分内容-我设置了一个新表,该表由其他表通过触发器填充。

显然,新表还没有数据——我需要找到一种方法来填充现有数据,而不仅仅是新数据。

触发器是更新/创建/删除,所以我可以在某处更新一个字段以在最后添加一个空格然后将其删除,但这似乎有点......奇怪

请问有什么想法吗?我在这里搜索过,一个也找不到。

示例将是表帖子,插入触发器然后使用计数(*)填充表 posts_stats

它专门用于从现有数据中触发触发器。

谢谢!

标签: mysqltriggers

解决方案


我建议创建视图。原因:MySQL 支持视图,包括可更新视图。视图是存储的查询,在调用时会产生结果集。视图充当虚拟表。(Mysql手册)

我将根据案例进行解释:

创建表:

CREATE TABLE `sample_user` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(16) DEFAULT NULL,
  `gender` enum('F','M') DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=ascii

插入样本数据:

insert into `sample_user` (`id`, `name`, `gender`) values('1','Aalona','F');
insert into `sample_user` (`id`, `name`, `gender`) values('2','Abbie','F');
insert into `sample_user` (`id`, `name`, `gender`) values('3','Brielle','F');
insert into `sample_user` (`id`, `name`, `gender`) values('4','Abigail','F');
insert into `sample_user` (`id`, `name`, `gender`) values('5','Caleb','M');
insert into `sample_user` (`id`, `name`, `gender`) values('6','Damian','M');

样本数据:

样本数据

语法创建视图:

CREATE VIEW sample_view
AS SELECT gender,COUNT(*) total FROM `sample_user` GROUP BY gender

在 Sqlyogeditor 中将如下所示:

SQL 数据

之后,您可以从该视图中进行选择。

SELECT * FROM sample_view

结果:

示例视图

进一步阅读: https ://dev.mysql.com/doc/refman/8.0/en/views.html


推荐阅读